Intersection 三维无限圆锥线相交公式

Intersection 三维无限圆锥线相交公式,intersection,infinite,raycasting,Intersection,Infinite,Raycasting,编辑:如果有人能在评论中解释到底发生了什么,那就太棒了。我们基本上是碰巧找到了答案 我试着对一个无限大的圆锥体做直线测试,但我很难理解我做错了什么。我确实有一些锥形物体要展示,但它看起来。。。错 EDIT: This is the solution for line-testing a infinite cone. double Cone::lineTest(double lineOrigin[3],double dir[3],double maxDistance)

编辑:如果有人能在评论中解释到底发生了什么,那就太棒了。我们基本上是碰巧找到了答案

我试着对一个无限大的圆锥体做直线测试,但我很难理解我做错了什么。我确实有一些锥形物体要展示,但它看起来。。。错

    EDIT: This is the solution for line-testing a infinite cone.
    double Cone::lineTest(double lineOrigin[3],double dir[3],double maxDistance) 

    {
    //Returns the distance from line origin to the collision point
    //The object is located at 0,0,0 so the difference is the lineOrigin
         double a = pow(D[0], 2) + pow(D[1], 2) - pow(D[2], 2);
         double b = 2*(O[0]*D[0] + O[1]*D[1] - O[2]*D[2]);
         double c = pow(O[0], 2) + pow(O[1], 2) - pow(O[2], 2);
         double d = b * b - 4*a*c;

         if(d < 0) 
             { return MAX_DISTANCE; }  
         d = sqrt(d);
         double sol1 = (-b - d)/(2.0*a);
         if(sol1 > 0) 
             return sol1;

    return MAX_DISTANCE;
    }
EDIT:这是对无限圆锥体进行线测试的解决方案。
double Cone::lineTest(双线原点[3],双线方向[3],双线最大距离)
{
//返回从线原点到碰撞点的距离
//对象位于0,0,0,因此差异是线原点
双a=pow(D[0],2)+pow(D[1],2)-pow(D[2],2);
双b=2*(O[0]*D[0]+O[1]*D[1]-O[2]*D[2]);
双c=pow(O[0],2)+pow(O[1],2)-pow(O[2],2);
双d=b*b-4*a*c;
if(d<0)
{返回最大距离;}
d=sqrt(d);
双溶胶1=(-b-d)/(2.0*a);
如果(sol1>0)
回归方程1;
返回最大距离;
}