Graphics 线与球的交点

Graphics 线与球的交点,graphics,linear-algebra,Graphics,Linear Algebra,我需要找到一条直线和一个球体之间的交点,这个交点由下面的方程定义 直线:p=P0+tv,其中P0是摄像机的眼睛,v是光线的方向 球体:p-Pc^T p-Pc=r^2,其中Pc是球体的中心,r是半径 如何求解t?我假设v是标准化的 直线最接近球体中心的点出现在t1: 在t1处,从直线到球体中心的距离为 h = sqrt((Pc - P0)^2 - t1^2) 如果在t1+/-td处与球体表面相交,则会发生相交,其中 td^2 + h^2 = r^2 td^2 = r^2 - h^2 =

我需要找到一条直线和一个球体之间的交点,这个交点由下面的方程定义

直线:p=P0+tv,其中P0是摄像机的眼睛,v是光线的方向

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


如何求解t?

我假设v是标准化的

直线最接近球体中心的点出现在t1:

在t1处,从直线到球体中心的距离为

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

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

现在你有了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。

检查此链接写入P0=e,f,g,v=u,v,w和Pc=a,b,c。然后把这些代入方程。你将得到一个t中的二次方程,其中系数是e,f,g,u,v,w,a,b,c和r中的多项式。您可以使用二次公式来解决这个问题。因此,求解底部方程将得到交点?@compsci45000:如果最后一个方程的右侧为负数,则没有解。
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