美文网首页
射线与平面相交

射线与平面相交

作者: goteet | 来源:发表于2015-08-26 21:28 被阅读834次

    当平面上取不相等的任意两个点组成一个向量,与平面的法线总是垂直的,向量垂直点乘为0,因此可以通过一个点和一个法线来定义,plane方程如下:(P - P0)·N = 0
    N=normal,P0表示平面上的一个点,P表示平面上的任意点,当P = P0时 0·N = 0

    射线方程在上一次写过,联立两个方程式可求交点。方程如下:

    ( O + D·t - P0 )·N = 0
    => ( O - P0 )·N + D·N·t = 0
    => t = ( P0 - O)·N / D·N  ( 其中D·N ≠0 )
    

    注意两点

    1. D·N = 0 时,表示射线与平面垂直,则射线与平面平行。
    • 解出 t < 0 时,表示 射线沿着平面相反的半平面发射,也是不相交的(当然如果是直线就没关系啦)

    代码很容易翻译,如下:

    bool Intersect(const Ray& ray, const Plane& plane, float& t0)
    {
        Vector3 p0o = plane.GetPosition() - ray.GetOrigin();
        float dotDN= dot(ray.GetDirection(), plane.GetNormal());
        //平行
        //绝对值表明从两面交平面都是成立的
        if (fabs(dotDN) < FLOAT_EPISLON)
        {
                return false;
        }
        t0 = dot(p0o, plane.GetNormal()) / determin;
        return t0 > 0;
    }

    相关文章

      网友评论

          本文标题:射线与平面相交

          本文链接:https://www.haomeiwen.com/subject/guyhcttx.html