我知道交叉点是否已经回答的问题,但我一直无法找到。
我的分类如下。
Circle (alpha, beta, gamma) with radius r
Points at (a,b,c) and (d,e,f)
m = (e-b)/(d-a) slope of xy
n = (f-c)/(d-a) slope of xz
y = m(x-a) + b
z = m(x-a) + c
Combine equation of sphere and line
(x-alpha)^2 + (m(x-a) + b - beta)^2 + (n(x-a) + c - gamma)^2 = r^2
after algebra
(1+m^2+n^2)x^2 + (-2*alpha + 2*m*(-m*a + b - beta) + 2*n*(-n*a + c - gamma))x + (alpha^2 + (-m*a + b - beta)^2 + (-n*a + c - gamma)^2 - r^2) = 0
然后我尝试在二次公式中使用上面的内容,但是使用2,3,1
的半径为2
的圆圈和0,0,0
到4,4,4
的一行我得到x值25.35
和10.65
似乎不对。
任何有关弄清楚我在这里做错了什么的帮助都将不胜感激。
答案 0 :(得分:1)
不失一般性,球体的中心是原点(如果不是,则从所有点中减去中心坐标)。
球体的隐式方程是
X² + Y² + Z² = R².
线段的参数方程:
X = X0 + t X01, Y = Y0 + t Y01, Z = Z0 + t Z01.
将第二个等式插入第一个等式,
(X01² + Y01² + Z01²) t² + 2 (X01.X0 + Y01.Y0 + Z01.Z0) t + X0² + Y0² + Z0² - R² = 0
这是您为t
求解的标准二次方程式。
两个根定义了球体内部的间隔,它足以与[0, 1]
相交以了解线段的有用部分。
答案 1 :(得分:0)
你在寻找距球或球的距离吗?球体是球的表面。在球体情况下,如果整个球体在球体内部,则距离大于0。
足以计算终点(D1,D2)到球心(C)的距离,并找到最接近球心(X)的线上(非线段)。有了这个:
在球赛中:
if X is on segment:
return max(0, dist(X,C)-R)
return max(0, min(D1, D2)-R)
在球形案例中:
if X is on segment:
if dist(X,C) < R: # Nearest point is inside sphere
if max(D1, D2) >= R: # One of points is out
return 0 # Than segment intersects sphere
return R - max(D1, D2) # Whole segment is inside sphere, end point is nearest (because of ball convexity)
return R - dist(X,C) # Whole segment is out
if D1 < R and D2 < R: # Whole segment is in
return R - max(D1, D2)
if D1 >= R and D2 >= R: # Whole segment is out
return R - min(D1, D2)
return 0 # Segment intersects sphere