如何计算距离圆周上某点固定弧长的(x,y)

问题描述:

我已经在这个上花了很多时间,我可以感觉到我的理智慢慢滑落。所以任何帮助将真正真正的赞赏。 我会尝试尽可能简洁。如何计算距离圆周上某点固定弧长的(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

在圆上,角度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)) 

是对着角θ(弧度)的弧形有弧长为θ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) 

有几件事情,可以帮助。不会写代码,但我想象解决方案将基于三角形。考虑:

任何半径是相同的长度。

因此,从P1-P1-C绘制的三角形是等腰三角形。

任何切线垂直于半径。

我很难在这里和现在证明这一点,但是如果将C从P1/P2延伸到与C→P处的圆相交的切线也形成等腰线。

应该很容易从中找出。