找到一个圆的中心(x和y位置),只有2个随机点和凸起

时间:2015-03-17 17:29:54

标签: algorithm math unity3d date-arithmetic

我试图找到一个圆圈的中心。我唯一的信息是: 圆圈中的两个随机点和圆形凸起。到目前为止,我已经设法计算圆的半径(至少我认为我做了)。不幸的是,到目前为止我已经使用了这种方法。

这些只是随机值,会在用户输入时发生变化)

PointA(x = 10,y = 15) PointB(x = 6,y = 12)

circle_bulge = 0.41

距离= PointB - PointA

radius =(距离/ 4)*(circle_bulge +(1 / circle_bulge))

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

2 个答案:

答案 0 :(得分:1)

以下是问题的图片:

enter image description here

根据定义,凸起 b = tg( Alpha / 4)

根据三角公式:tg(2 angle )= 2tg( angle )/(1-tg 2 角度))

应用于角度 = Alpha / 4并使用凸起的定义:

tg( Alpha / 2)= 2 b /(1- b 2

另一方面

tg( Alpha / 2)= s / d

然后

s / d = 2 b /(1- b 2 )和

d = s (1- b 2 )/(2 b

允许我们计算 d 因为 b 已知且 s = || B - A || / 2,其中|| B - A ||表示向量 B - A 的范数。

现在,让我们计算

u v )=( B - A )/ || B < / em> - A ||

然后||( u v )|| = 1,( v , - u )与 B - A 正交,我们有

C =( v , - u d +( A + )/ 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)

答案 1 :(得分:0)

我相信您在此参考中拥有所有必需的数学:http://autocad.wikia.com/wiki/Arc_relationships

圆周中心必须在直线上,该直线穿过具有垂直矢量AB的线段的中点。你知道三点形成的三角形的角度,因为你知道凸起,所以你必须解决一个简单的方程。尝试一下,如果你不能,我会尽力帮助你。

Ignacio正确指出将会有两种解决方案。

修改

中间点由:

给出
M = (A + B) / 2

AB载体是gien:

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的第二个方程(它有两个解)。

请原谅,但我不知道如何在这里插入数学: - )