我正在尝试找到一个圆的中心。我唯一有的信息是:圆内的两个随机点和圆弧长度。目前为止,我已经成功计算出了圆的半径(至少我认为是这样)。下面是我目前使用过的方程式:
这些只是随机值,会根据用户输入而改变)
点A(x=10,y=15) 点B(x=6,y=12)
圆弧长度=0.41
距离=点B-点A
半径=(距离/4)*(圆弧长度+(1/圆弧长度))
如果这个数学公式不正确,请告诉我,但请记住,我需要找到圆的中心的X和Y坐标。
我正在尝试找到一个圆的中心。我唯一有的信息是:圆内的两个随机点和圆弧长度。目前为止,我已经成功计算出了圆的半径(至少我认为是这样)。下面是我目前使用过的方程式:
这些只是随机值,会根据用户输入而改变)
点A(x=10,y=15) 点B(x=6,y=12)
圆弧长度=0.41
距离=点B-点A
半径=(距离/4)*(圆弧长度+(1/圆弧长度))
如果这个数学公式不正确,请告诉我,但请记住,我需要找到圆的中心的X和Y坐标。
根据定义,凸起是b=tg(Alpha/4)
从三角公式:tg(2 angle)=2tg(angle)/(1-tg2(angle))
应用于angle=Alpha/4并使用凸起的定义:
tg(Alpha/2)=2b/(1-b2)
另一方面
tg(Alpha/2)=s/d
然后
s/d=2b/(1-b2)和
d=s(1-b2)/(2b)
这使我们能够计算d,因为b已知且s = ||B - A||/2,其中 ||B - A|| 表示向量B - A的范数。
现在,让我们计算
(u,v) = (B - A)/||B - A||
然后||(u,v)|| = 1,(v,-u)垂直于B - A,我们有
C = (v,-u)d + (A+B)/2
更新
计算中心的伪代码
输入:
A = (a1, a2), B = (b1, b2) "two points"; b "bulge"
Calculations:
"lengths"
norm := sqrt(square(b1-a1) + square(b2-a2)).
s := norm/2.
d := s * (1-square(b))/(2*b)
"direction"
u := (b1-a1)/ norm.
v := (b2-a2)/ norm.
"center"
c1 := -v*d + (a1+b1)/2.
c2 := u*d + (a2+b2)/2.
Return C := (c1, c2)
注意:对于居中有两种解决方案,另一种是
c1 := v*d + (a1+b1)/2.
c2 := -u*d + (a2+b2)/2.
Return C := (c1, c2)
我相信你在这个参考文献中已经掌握了所有所需的数学知识:http://autocad.wikia.com/wiki/Arc_relationships
圆心必须位于通过垂直向量AB的中点的线上。你知道由三个点形成的三角形的角度,因为你知道凸度,所以你需要解决一个简单的方程。试一试,如果你不行,我会帮助你。
Ignacio指出将会有两个解是正确的。
编辑
中点由以下公式给出:
M = (A + B) / 2
AB向量由以下给出:
AB = A-B
具有坐标(X,Y)的圆C的中心必须在以下线路上:
((X, Y) - M) * AB = 0 //where * is the scalar vector product
Angle = 4 arctan(bulge)
sin (Angle/2) = d2/d1
这将为您提供X和Y的第二个二次方程式(它有两个解)。
抱歉,我不知道如何在此处插入数学符号 :-)