2

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

我期望两个 3D 点作为解决方案,因为有 2 个球体满足要求。

谢谢。

4

2 回答 2

8
  1. 找到包含所有三个点的平面 P。在那个平面上,这些点确定了一个三角形。

  2. 找到这个三角形周围的圆圈。让 C 表示这个圆的中心。

  3. 找到垂直于 P 并与 C 相交的线。

  4. 在这条线上,找到与圆具有所需距离的那两个点。

我忽略了退化的情况。

于 2012-07-30T10:16:04.713 回答
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-p1, p31=p3-p1, n=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)以获得答案。

于 2012-07-30T14:33:34.210 回答