使用仅有的两个随机点和凸度找到圆的中心(x和y位置)

3

我正在尝试找到一个圆的中心。我唯一有的信息是:圆内的两个随机点和圆弧长度。目前为止,我已经成功计算出了圆的半径(至少我认为是这样)。下面是我目前使用过的方程式:

这些只是随机值,会根据用户输入而改变)

点A(x=10,y=15) 点B(x=6,y=12)

圆弧长度=0.41

距离=点B-点A

半径=(距离/4)*(圆弧长度+(1/圆弧长度))

如果这个数学公式不正确,请告诉我,但请记住,我需要找到圆的中心的X和Y坐标。


1
这将导致每个情况下都有两种可能的解决方案,其中两个点在圆上不直接相对。 - Ignacio Vazquez-Abrams
是的,永远会有两个圆,但我相信我可以再次使用凸起来确定正确的那一个。如果凸起为正,我就得到一个,如果为负,则是另一个。我只是不想谈论它,以避免过于复杂化事情。 - Ricardo Coelho
2个回答

1
这是一个问题的图片:

enter image description here

根据定义,凸起是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)

叫我白痴吧,但我没看懂你在这里写的一半内容 :( - Ricardo Coelho
没问题。请帮我澄清我的回答。你不太明白的第一件事是什么? - Leandro Caniglia
我不明白如何将这个数学问题转化为编程代码。不知道你有没有相关经验... - Ricardo Coelho
我已经添加了伪代码。如果您有进一步的问题,请告诉我。 - Leandro Caniglia
@RyanWang,你说得对。我已经更新了答案。非常感谢你提醒我。 - Leandro Caniglia
显示剩余3条评论

0

我相信你在这个参考文献中已经掌握了所有所需的数学知识: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

由点A、B和C生成的等腰三角形,其对边为AB线段所对应的角:
Angle = 4 arctan(bulge)

现在我们可以计算从中心C到A的距离,我们称之为d1,以及从A到B的一半距离,我们称之为d2,然后我们就知道了。
sin (Angle/2) = d2/d1

这将为您提供X和Y的第二个二次方程式(它有两个解)。

抱歉,我不知道如何在此处插入数学符号 :-)


这只是一个更大函数的一小部分。我不知道是因为太累了(整天都在做这个)还是太蠢了,无法理解下一步该怎么做。如果你能给我更多提示,那将非常有帮助。 - Ricardo Coelho

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