给出一个弧的描述,它有一个起点和终点(笛卡尔x,y坐标),半径和方向(顺时针或逆时针),我需要将弧转换成一个带有起始角的弧,结束角度,中心和半径。
是否有允许我这样做的已知算法或伪代码?此外,是否有任何特定术语来描述这些类型的转换?
答案 0 :(得分:6)
你可以找到一个解决这个方程系统的中心:
(sx-cx)^2 + (sy-cy)^2=R^2
(ex-cx)^2 + (ey-cy)^2=R^2
其中(sx,sy)是起点的坐标,(ex,ey)表示终点,unknowns cx,cy表示中心。 该系统有两种解决方案。然后可以找到角度
StartAngle = ArcTan2(sy-cy, sx-cx)
EndAngle = ArcTan2(ey-cy, ex-cx)
请注意,已知方向不允许从两个可能的解决方案中选择一个,而没有其他限制。例如,start =(0,1),end =(1,0),R = 1,Dir =顺时针给我们两个Pi / 2弧与中心(0,0)和3 * Pi / 2弧与中心( 1,1)
答案 1 :(得分:3)
我建议采用与MBo不同的方法来获得两个圆的中心,这两个圆具有给定的半径并传递到起点和终点。
如果P和Q是弧的起点和终点,则两个圆中的每一个的中心位于与PQ正交的线L上,即从P到Q的线,并且将PQ平分。从中心到L的距离d很容易通过毕达哥拉斯定理得到。如果e是PQ的长度,则d ^ 2 +(e / 2)^ 2 = r ^ 2。这样你就可以避免解决从MBo方法中得到的方程组。
请注意,如果你有一个半圆,任何方法都会在数值上变得不稳定,因为只有一个给定半径的圆,其上有P和Q. (我想我记得在这种情况下,正确的术语是'问题是病态的'。当P和Q正好相距2r时发生,并且要弄清楚这是否真的是你需要检查两个双打的相等性,总是有点问题。如果由于某种原因,你知道你有一个半圆,你最好只计算PQ的中心。