我有三个3D点p1,p2和p3以及球半径。如何从3点和半径找到球心?
我希望有两个3D点作为解决方案,因为有2个球符合要求。
感谢。
答案 0 :(得分:8)
找到包含所有三个点的平面P.在那架飞机上 点确定一个三角形。
找到此三角形周围的圆圈。设C代表中心 这个圈子。
找到垂直于P的线并在C处穿过它。
在此行上,找到与所需距离的2个点 圈。
我忽略了堕落的案例。
答案 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-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)
以获得答案。