游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2226|回复: 4

线和面求交,线和三角形交.

[复制链接]

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2004-6-30 17:07:00 | 显示全部楼层 |阅读模式
        bool InterSection(XRay& ray,XPlan& plan,XPoint& point,float & t)
        {
                t = 0;

                /***

                -D - P0 * N(A,B,C)
                t = --------------------
                d * N(A,B,C)

                其中D 为平面方程中的D,
                P0为射线的起点。而 d 为射线的方向

                **/
                t= -(plan.D  + ray.m_Point.x * plan.A + ray.m_Point.y * plan.B + ray.m_Point.z * plan.C);
                float t2 = (ray.m_Dir.x * plan.A + ray.m_Dir.y * plan.B + ray.m_Dir.z * plan.C) ;

                if(t2 == 0.00)
                        return false;

                t /= t2;


                //求出交点
                point  = ray.m_Point + ray.m_Dir * t;

                if( t < 0)
                        return false;

                return true;
        }


        bool    InterSection(XRay& ray,XTriangle& tri,XPoint& point,float & t)
        {

                XVector3D v1 = tri.m_points[1] - tri.m_points[0];
                XVector3D v2 = tri.m_points[2] - tri.m_points[0];

                XVector3D n = v1.cp(v2);
                /**********************************************************************
                ray = p0 + D * t
                Tri : p1 - p3

                (P2-P1) X (P3-P1) = N

                N * (P - P1) = 0  ===>
                N * (P0 + D * t - P1)  = 0

                ==>

                N * (P0 - P1) + N * D * t = 0;
                (P1-P0) * N
                t = ----------------------
                D * N
                ******************************************************************/
                t = n.dp(tri.m_points[0] - ray.m_Point);
                t /= (ray.m_Dir.dp(n));
                if( t < 0)
                        return false;

                //求出交点
                point  = ray.m_Point + ray.m_Dir * t;

                //判断点是不是在三角内部
                v1 = point - tri.m_points[0];
                v2 = point - tri.m_points[1];
                XVector3D v3 = point - tri.m_points[2];

                n = v1.cp(v2);
                XVector3D n1 = v2.cp(v3);

                if(n.isZero())
                        return true;
                if(n1.isZero())
                        return true;

                if( n.x * n1.x <= 0 )
                        return false;
                if( n.y * n1.y <= 0 )
                        return false;
                if( n.z * n1.z <= 0 )
                        return false;

                return true;
        }

2

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2004-7-3 20:48:00 | 显示全部楼层

Re:线和面求交,线和三角形交.

写两个数学公式不就可以了吗?

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
 楼主| 发表于 2004-7-4 23:46:00 | 显示全部楼层

Re:线和面求交,线和三角形交.

楼上的真牛.

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-5-14 10:47:00 | 显示全部楼层

Re:线和面求交,线和三角形交.

不错。学习下

18

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2010-5-14 21:40:00 | 显示全部楼层

Re:线和面求交,线和三角形交.

谢谢,收藏了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 16:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表