3

给定具有起点和终点(都在笛卡尔 x,y 坐标中)、半径和方向(顺时针或逆时针)的弧的描述,我需要将弧转换为具有起始角度、结束角度的弧、中心和半径。

是否有已知的算法或伪代码允许我这样做?此外,是否有任何特定术语来描述这些类型的转换?

4

2 回答 2

6

您可以找到求解此方程组的中心:

(sx-cx)^2 + (sy-cy)^2=R^2
(ex-cx)^2 + (ey-cy)^2=R^2

其中 (sx,sy) 是起点坐标, (ex,ey) 是终点坐标,未知数 cx,cy 是中心坐标。该系统有两种解决方案。然后可以找到角度为

StartAngle = ArcTan2(sy-cy, sx-cx)
EndAngle = ArcTan2(ey-cy, ex-cx)

请注意,已知方向不允许在没有额外限制的情况下从两种可能的解决方案中选择一种。例如,start=(0,1), end=(1,0), R=1 和 Dir = 顺时针为我们提供中心为 (0,0) 的 Pi/2 弧和中心为 (0,0) 的 3*Pi/2 弧1,1)

于 2013-04-07T15:50:25.407 回答
3

我会提出一种与 MBo 不同的方法来获得两个圆的中心,它们具有给定的半径并传递到起点和终点。

如果 P 和 Q 是圆弧的起点和终点,则两个圆的中心都位于与 PQ 正交的直线 L 上,直线 L 是从 P 到 Q 的直线,并且平分 PQ。从中心到 L 的距离 d 很容易通过毕达哥拉斯定理得到。如果e是PQ的长度,那么d^2 + (e/2)^2 = r^2。这样,您就可以避免求解从 MBo 方法中获得的方程组。

请注意,如果你有一个半圆,任何方法都会在数值上变得不稳定,因为只有一个给定半径的圆,上面有 P 和 Q。(我想我记得在这种情况下正确的术语是“问题不成立”。它发生在 P 和 Q 正好相距 2r 时,要弄清楚这是否真的是真的,你需要检查两个双打的相等性,这总是有点问题。如果由于某种原因,你知道你有一个半圆,你最好只计算 PQ 的中心)。

于 2013-04-07T16:08:58.563 回答