2010-11-05 342 views
9

我已經在這個上花了很多時間,我可以感覺到我的理智慢慢滑落。所以任何幫助將真正真正的讚賞。 我會嘗試儘可能簡潔。如何計算距離圓周上某點固定弧長的(x,y)

我在2D平面上有一個圓。我知道它的中心點(C)和半徑(R)的笛卡爾座標。

我的困惑源於這個問題。當在圓外的平面上提供一個點時;我可以計算最接近該點的圓周上的點(P)。

我想要做的是確定圓周上2點的(x,y)座標。我們稱它們爲P1和P2。 P1和P2是弧的兩端。弧線具有固定的長度(X)。 P是P1和P2之間的中間點。因此,從P到P1的電弧長度都是X/2。

總之: 給出C,R,P,X;我需要計算P1和P2。

我想在C++中編碼,但任何建議或僞代碼將是偉大的。

編輯: X爲電弧長度,而不是P1和P2

+19

如何從以下的一些例子:http://www.codeproject.com/KB/recipes/Wykobi。aspx它們非常高效,有點優雅,尋找「從外部點上的圓上最近的點」和「圓相切線段」 – 2010-11-06 02:19:23

回答

4

在圓上,角度theta對應於theta * R的弧長,這意味着你的電弧將對着的theta = X/R的角度之間的直線。因此,如果開始你點

P = C + R * (sin(u), cos(u)) 

然後就上去/下降theta/2

P1 = C + R * (sin(u + theta/2), cos(u + theta/2)) 

P2 = C + R * (sin(u - theta/2), cos(u - theta/2)) 
3

是對着角θ(弧度)的弧形有弧長爲θR。所以,你需要一個θ= X /(2R)的半角。然後你需要取矢量(P -C),旋轉它的角度爲±θ,然後加回C得到P1和P2。要通過角度旋轉矢量,請將其乘以rotation matrix

所以,在僞代碼,它應該是這樣的:

θ = X/(2R) 
A = 2x2 rotation matrix corresponding to a rotation by θ radians 
A' = transpose of A 
P1 = C + A * (P - C) 
P2 = C - A' * (P - C) 
0

有幾件事情,可以幫助。不會寫代碼,但我想象解決方案將基於三角形。考慮:

任何半徑是相同的長度。

因此,從P1-P1-C繪製的三角形是等腰三角形。

任何切線垂直於半徑。

我很難在這裏和現在證明這一點,但是如果將C從P1/P2延伸到與C→P處的圓相交的切線也形成等腰線。

應該很容易從中找出。