我花了很多时间为此,我可以感觉自己的理智慢慢滑倒。因此,任何帮助将不胜感激。我会尽力而为。

我在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处相交的切线的切线,也会形成等化等质。

应该很容易从那里弄清楚。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top