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

9
我花费了许多时间,感觉我的理智正在慢慢流失。所以,任何帮助都将不胜感激。 我会尽量简洁明了。
在二维平面上有一个圆。我知道它的中心点(C)和半径(R)的笛卡尔坐标。
我的困惑来自这个问题。当提供一个位于圆外的平面上的点时;我可以计算离该点最近的圆周上的点(P)。
我想做的是确定圆周上两个点的(x,y)坐标。我们称它们为P1和P2。P1和P2是一段弧的两端。该弧的长度是固定的(X)。P是P1和P2之间的中间点。因此,从P到P1和从P到P2的弧长都是X/2。
简而言之: 给定C、R、P、X;我需要计算P1和P2。
我正试图用c++编写代码,但任何建议或伪代码都将非常棒。
编辑: X是弧长,不是P1和P2之间的直线距离。

19
以下是需要翻译的内容:How about some of the examples from the following: http://www.codeproject.com/KB/recipes/Wykobi.aspx They are very efficient and somewhat elegant, look for "Closest Point On Circle From External Points" and "Circle Tangent Line Segments"这些例子来自于以下链接:http://www.codeproject.com/KB/recipes/Wykobi.aspx,它们非常高效,而且有些优雅。你可以查找“从外部点到圆的最近点”以及“圆的切线线段”。 - Matthieu N.
3个回答

4
在一个圆上,角度θ对应着弧长θ*R,这意味着你的弧将夹带一个角度θ=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。要通过角度旋转向量,请将其乘以旋转矩阵
因此,在伪代码中,它看起来像这样:
θ = 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相交的切线,则也形成等腰三角形。

从那里应该很容易解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接