线与球体之间的交点

时间:2015-03-31 22:53:36

标签: graphics linear-algebra

我需要找到由以下等式

定义的直线和球体之间的交点

行: P = P0 + tv,其中P0是相机的眼睛,v是光线的方向。

球体: (P - Pc)^T (P - Pc) = r^2,其中Pc是球体的中心,r是半径

我如何解决t

2 个答案:

答案 0 :(得分:0)

我认为v是规范化的。

线最接近球体中心的点发生在t 1

v . (P0 + t1 v - Pc) = 0
v . (Pc - P0) = t1

在t 1 处,从线到球体中心的距离是

h = sqrt((Pc - P0)^2 - t1^2)

在t1 +/- td将发生与球体表面的交点(如果它发生的话)

td^2 + h^2 = r^2
td^2 = r^2 - h^2
     = r^2 - (Pc - P0)^2 + t1^2
     = r^2 - (Pc - P0)^2 + (v . (Pc - P0))^2

答案 1 :(得分:0)

首先将坐标更改为球体中心的系统。 P0 -> P0-Pc

现在你有P0=(x0,y0,z0),光线坐标为

x = x0+t*vx
y = y0+t*vy
z = z0+t*vz

并确保ǁvx,vy,vzǁ=1

球体的等式为x^2+y^2+z^2-R^2 = 0,其扩展为

t^2 + 2*(vx*x0+vy*y0+vz*z0)*t + (x0^2+y0^2+z0^2-R^2) = 0
t^2 + 2*B*t+C =0 
  B = vx*x0+vy*y0+vz*z0
  C = x0^2+y0^2+z0^2-R^2
t = +√(B^2-C)/2-B
t = -√(B^2-C)/2-B

这给出了两个p=Pc+P0+v*t计算的t解决方案。