如何从3点和半径找到球心?

时间:2012-07-30 09:59:37

标签: math graphics 3d

我有三个3D点p1,p2和p3以及球半径。如何从3点和半径找到球心?

我希望有两个3D点作为解决方案,因为有2个球符合要求。

感谢。

2 个答案:

答案 0 :(得分:8)

  1. 找到包含所有三个点的平面P.在那架飞机上 点确定一个三角形。

  2. 找到此三角形周围的圆圈。设C代表中心 这个圈子。

  3. 找到垂直于P的线并在C处穿过它。

  4. 在此行上,找到与所需距离的2个点 圈。

  5. 我忽略了堕落的案例。

答案 1 :(得分:2)

有很多方法可以将其形式化。这是其中之一(基本上与阿里建议相同,但有更多数学):你想找点

(a)与p1,p2,p3等距

(b)距离正好是R.

首先,根据http://en.wikipedia.org/wiki/Circumscribed_circle找到外接圆的中心(参见关于“d维嵌入三角形的外接圆”的部分):

p0 = cross(
    dot(p21, p21) * p31 - dot(p31, p31) * p21,
    n
) / 2 / dot(n, n) + p1,

p21=p2-p1p31=p3-p1n=cross(p21,p31)

项目(a)中的点位于穿过此点的直线上,并且与包含p1,p2,p3的平面正交,因此其等式为

p(t) = p0 + n * t

将其替换为

dist(p1, p)^2 = dot(p - p1, p - p1) = R^2

得到二次方程

dot(n, n) * t^2 - 2*dot(n, p0-p1) * t + dot(p0-p1, p0-p1) = R^2

实际上,n(p0-p1)是正交的,所以左边的第二个加数是0,

t1 = sqrt((R^2 - dot(p0-p1, p0-p1))/ dot(n, n)),
t2 = -sqrt((R^2 - dot(p0-p1, p0-p1))/ dot(n, n))

(请注意p1p0取消的方式。将这些替换为p(t)以获得答案。