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

标签 algorithm math unity3d date-arithmetic

我正在尝试寻找圆心。我唯一的信息是: 圆圈中的两个随机点和圆圈凸起。到目前为止,我已经设法计算出圆的半径(至少我认为我做到了)。我将在我目前使用的等式下面发布。

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

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

circle_bulge = 0.41

距离 = B 点 - A 点

半径 = (距离/4) * (circle_bulge + (1/circle_bulge ))

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

最佳答案

这是问题的图片:

enter image description here

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

根据三角函数公式:tg(2 ​​角度) = 2tg(角度)/(1-tg2(角度))

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

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

另一方面

tg(Alpha/2) = s/d

然后

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

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

这允许我们计算 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)

关于algorithm - 找到只有 2 个随机点和凸起的圆心(x 和 y 位置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105838/

相关文章:

c# - 运行所有 Start 方法后创建事件链

c# - 是否可以生成在三元搜索树中可找到的所有可能术语?

java - 完美数程序java

java - Java 中的素数 - 算法

c - C 中的双截断和数学问题

c# - 将 Unity 3D 与 ZXing 集成

java - 创建多个相同类型对象的设计模式

algorithm - 配对数字的贪心算法使最大和最小化

python - 使用 DFS 搜索图形时出现 KeyError

c# - Unity 4.6+ 通过脚本创建文本