如何计算距离圆周上某点固定弧长的(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
答
在圆上,角度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处的圆相交的切线也形成等腰线。
应该很容易从中找出。
如何从以下的一些例子:http://www.codeproject.com/KB/recipes/Wykobi。aspx它们非常高效,有点优雅,寻找“从外部点上的圆上最近的点”和“圆相切线段” – 2010-11-06 02:19:23