找到只有 2 个随机点和凸起的圆心(x 和 y 位置)
Find the center of a circle (x and y position) with only 2 random points and bulge
我正在寻找圆心。我唯一的信息是:
圆圈中的两个随机点和圆圈凸起。到目前为止,我已经设法计算出圆的半径(至少我认为我做到了)。我将 post 描述我目前使用的等式。
这些只是随机值,会根据用户输入而改变)
点A(x = 10, y = 15)
点 B(x = 6, y = 12)
circle_bulge = 0.41
距离 = 点 B - 点 A
半径=(距离/4)*(circle_bulge+(1/circle_bulge))
如果此数学计算不正确,请告诉我,但请记住,我需要找到圆心的 X 和 Y 坐标
我相信您已掌握此参考资料中所有必需的数学知识: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 的第二个二次方程(它有两个解)。
请原谅符号,但我不知道如何在此处插入数学:-)
这是问题的图片:
根据定义,凸起是 b = tg(Alpha/4)
由三角函数公式:tg(2角度) = 2tg(角度)/(1-tg 2(角度))
应用于角度 = Alpha/4 并使用凸起的定义:
tg(Alpha/2) = 2 b/(1-b2)
另一方面
tg(Alpha/2) = s/d
然后
s/d = 2 b/(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"
计算:
"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)
我正在寻找圆心。我唯一的信息是: 圆圈中的两个随机点和圆圈凸起。到目前为止,我已经设法计算出圆的半径(至少我认为我做到了)。我将 post 描述我目前使用的等式。
这些只是随机值,会根据用户输入而改变)
点A(x = 10, y = 15) 点 B(x = 6, y = 12)
circle_bulge = 0.41
距离 = 点 B - 点 A
半径=(距离/4)*(circle_bulge+(1/circle_bulge))
如果此数学计算不正确,请告诉我,但请记住,我需要找到圆心的 X 和 Y 坐标
我相信您已掌握此参考资料中所有必需的数学知识: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 的第二个二次方程(它有两个解)。
请原谅符号,但我不知道如何在此处插入数学:-)
这是问题的图片:
根据定义,凸起是 b = tg(Alpha/4)
由三角函数公式:tg(2角度) = 2tg(角度)/(1-tg 2(角度))
应用于角度 = Alpha/4 并使用凸起的定义:
tg(Alpha/2) = 2 b/(1-b2)
另一方面
tg(Alpha/2) = s/d
然后
s/d = 2 b/(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"
计算:
"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)