如何计算(x,y)的固定电弧长度远离圆周上的点
-
29-09-2019 - |
题
我花了很多时间为此,我可以感觉自己的理智慢慢滑倒。因此,任何帮助将不胜感激。我会尽力而为。
我在2D平面上有一个圆圈。我知道其中心点(C)和半径(R)的笛卡尔坐标。
我的困惑源于这个问题。当圆外的平面上有一个点时;我可以计算最接近该点的圆的圆周上的点(p)。
我要做的是确定周长2分的(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之间的直线
解决方案
在圆上,角度 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),以±θ的角度旋转它,然后添加回去以获得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)
有几件事可能会有所帮助。不会编写代码,但我想解决方案将基于三角形。考虑:
任何半径都是相同的长度。
因此,从P1-P1-C绘制的三角形是同步。
任何切线都垂直于半径。
我很难在这里和现在都在这里证明这一点,但是如果您将线路从C到P1/P2扩展到与C-> P处相交的切线的切线,也会形成等化等质。
应该很容易从那里弄清楚。
不隶属于 StackOverflow