簡體   English   中英

Python在橢圓上找到已知點的投影點

[英]Python find the projection point of a known point on an ellipse

我需要執行以下過程:

關於下圖,我知道紅點的坐標。 我必須找到橢圓上紅色點的投影,從而找到橢圓上紫色的點。

我有橙色線的點和橢圓的點。

有沒有可用的算法可以做到這一點? 在此處輸入圖片說明

由於橢圓是關於給定線對稱的,因此您所需要做的就是計算該點在該直線上的反射率。

方程

x1y1是紅點的坐標, ax+by+c=0是直線的方程式。 xy是反射點的坐標。

由於該線穿過原點,因此c為0。

如果知道直線與x軸的夾角(θ),則可以將ab的值計算為

我們知道y = x * tan(θ)ax + by = 0因此

-a/b = tan(θ)

b = 1a變為-tan(θ)

參考: https : //math.stackexchange.com/questions/1013230/how-to-find-coordinates-of-reflected-point

您可以在紅色點處構造一個非直角頂點的直角三角形,這樣就可以計算出與投影點到橙色線的距離,該距離與紫色點的長度相同。

三角形的構建可以從在紅色點之間構造一條線(A),找到原點和橙色線之間的角度(角度B)開始。 從那里開始,A線和右頂點線之間的角度為90-(角度B)。 然后是和弦的長度。

設從“中心”紅色點c到另一個紅色點r的向量為u ,從中心紅色點到橙色線上其他點的向量為v 我們希望將u旋轉uv之間的角度兩倍。 設θ為uv之間的夾角。 我們可以取一個兩倍於θ的旋轉矩陣 ,並將其乘以u,以獲得從紅色“中心”點c到紫色點p的向量。 由於我們知道紅色點線和橙色線之間的角度的余弦值,因此我們不必取任何角度的正弦或余弦值或其他任何值,我們可以將其全部用矢量點表示產品等。

可以將其簡化為一個更簡單的方程式,但這是一種反映“展示您的作品”的算法:

  • 找出余弦(θ)為u * v / || || || v ||

  • 使用雙角度勾股定律從余弦(θ)中找到余弦(2θ)和正弦(2θ)

  • 構造旋轉矩陣

  • 將旋轉矩陣乘以u得到w ,從cp的向量

  • w的分量添加到c的坐標中以獲得p的坐標

假設您沒有為點和線指定方程的確切形式,我將采用以下表示法:橙色線穿過原點並沿着向量[v1,v2]穿過,因此其上的每個點都可以表示為a*[v1,v2] 鑒於此,以下方法應該有效:

  1. 找到任何垂直於v的向量(我將其稱為n):任何形式為n=[-(v2*n2)/v1, n2]且n2為非零的向量。

  2. 畫出沿着n的紅點(不是原點)的線: [r1,r2]+b*[-(v2*n2)/v1, n2]描述了任何這樣的點。

  3. 找到這些線相交的參數a和b:求解a和b的v1 = r1-b (v2 * n2)/ v1和a * v2 = r2 * b * n2 .b的結果是您需要的是:

     b= (v1*(r1*v1-r2*v1))/(n2*(v1^2 + v2^2)) 
  4. 對於您選擇的任何n2,紫色點的坐標[r1,r2]+2*b*[-(v2*n2)/v1, n2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM