我有三个 3D 点 p1、p2 和 p3 以及球体半径。如何从 3 个点和半径中找到球体中心?
我期望两个 3D 点作为解决方案,因为有 2 个球体满足要求。
谢谢。
找到包含所有三个点的平面 P。在那个平面上,这些点确定了一个三角形。
找到这个三角形周围的圆圈。让 C 表示这个圆的中心。
找到垂直于 P 并与 C 相交的线。
在这条线上,找到与圆具有所需距离的那两个点。
我忽略了退化的情况。
有多种方法可以将其形式化。这是其中之一(与阿里建议的基本相同,但更多数学):你想找到点
(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))
(注意如何取消)p1
。p0
将这些代入p(t)
以获得答案。