我需要找到由以下等式
定义的直线和球体之间的交点 行: P = P0 + tv
,其中P0
是相机的眼睛,v是光线的方向。
球体: (P - Pc)^T (P - Pc) = r^2
,其中Pc
是球体的中心,r是半径
我如何解决t
?
答案 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
解决方案。