将弧形变换的起始点和终止点转换为起始角度和终止角度

3

对于具有起点和终点(都是笛卡尔X、Y坐标系)的圆弧描述,包括半径和方向(顺时针或逆时针),我需要将圆弧转换为具有起始角度、结束角度、中心和半径的圆弧。

是否有已知的算法或伪代码可以使我执行此操作?此外,是否有任何特定术语来描述这些类型的转换?


完全同意我的问题。你选择了这些答案中的哪一个,还是其他什么? - scott_f
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=clockwise会给我们一个以(0,0)为中心的Pi/2弧和一个以(1,1)为中心的3*Pi/2弧。

@CinCout 在3D中,我们应该选择/定义一个平面来绘制弧线,并在这个平面上像2D一样工作(顺时针和其他的东西在3D中没有意义)。 - MBo

3
我提出了一种与MBo不同的方法来获取具有给定半径并通过起点和终点的两个圆的中心。
如果P和Q是弧的起点和终点,则两个圆的每个中心都位于L线上,该线垂直于PQ(从P到Q的线)且平分PQ。中心到L的距离d很容易用勾股定理得到。如果e是PQ的长度,则d^2 + (e/2)^2 = r^2。这样,您可以避免解决MBo方法得到的方程组。
请注意,在您拥有半圆的情况下,任何方法都会因为只有一个具有给定半径且P和Q都在其上的圆而变得数值不稳定。(我猜测在这种情况下正确的术语是“问题不适当”。当P和Q恰好相距2r时,要确定是否实际上是这样,您需要检查两个双精度数的相等性,这总是有些困难的。如果出于某种原因,您知道自己拥有半圆,那么最好计算PQ的中心)。

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