9

我在这件事上花了这么多时间,我能感觉到我的理智在慢慢滑落。因此,任何帮助将不胜感激。我会尽量简洁。

我在二维平面上有一个圆圈。我知道它的中心点(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 之间的直线

4

3 回答 3

4

在一个圆上,一个角度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))
于 2010-11-05T23:53:23.267 回答
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)
于 2010-11-05T23:57:45.617 回答
0

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

任何半径都是相同的长度。

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

任何切线都垂直于半径。

我很难在此时此地证明这一点,但是如果你将线从 C 延伸到 P1/P2 到在 C->P 处与圆相交的切线也形成等腰。

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

于 2010-11-06T00:07:09.080 回答