游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2477|回复: 2

一个看不懂的计算3个平面交点方式

[复制链接]

5

主题

18

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2009-7-1 23:33:00 | 显示全部楼层 |阅读模式
//查找3个平面之间的交叉点
bool CPlane::Intersect(const CPlane &p2, const CPlane &p3, CVector3 *intersectPoint)
{
        CVector3 temp;
        CVector3 normal(normal_a ,normal_b , normal_c);
        CVector3 p2normal( p2.normal_a , p2.normal_b , p2.normal_c);
        CVector3 p3normal( p3.normal_a , p3.normal_b , p3.normal_c);

        //获得P2,P3交线
        temp.CrossProduct(p2normal , p3normal);

        //交线与平面1夹角
        float dp = normal.DotProduct(temp);

        //为90度则交线与平面1法线垂直,与平面1平行,不存在交点
        if (dp == 0.0f)
                return false;

        //找到交点
        if (intersectPoint)
        {
                *intersectPoint = temp * d;

                //平面1,3交线
                temp.CrossProduct(p3normal , normal);

                *intersectPoint = *intersectPoint + (temp * p2.distance);

                //平面1,2交线
                temp.CrossProduct(normal , p2normal);
                *intersectPoint = *intersectPoint + (temp * p3.distance);

                *intersectPoint = *intersectPoint / -dp;
        }

        return true;
}

哪位大哥对这个计算3个平面交点的方式比较熟啊,我自己写的是解方程组,看了这个算法,看的不是很明白

首先对象自身是个平面1,传入平面2,平面3,计算3个平面的交点,其中的normal_a,normal_b,normal_c为平面法线向量的3个值

计算了平面2,3的法线,进行叉乘,得到temp向量,即为p2和p3的交线

用平面1的法线点乘此temp向量,如果结果为0,说明平面1平行于temp向量,则3个平面无交点

不知道上边我理解的对不对,然后接下来如何求交点的地方就看不懂几何意义了

*intersectPoint = temp * d;
。。。。。
*intersectPoint = *intersectPoint + (temp * p2.distance);
。。。。。
*intersectPoint = *intersectPoint + (temp * p3.distance);
。。。。。
*intersectPoint = *intersectPoint / -dp;

关键的疑点在这4句,两平面交线向量点乘上另一个平面到原点的距离,这个是个什么几何意义呢? 是个怎么的过程呢?

我例举了几个简单的平面带入这个算法试了一下,的确求出的是正确交点。

5

主题

18

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2009-7-1 23:48:00 | 显示全部楼层

Re:一个看不懂的计算3个平面交点方式

明白了~!!!
用解方程组解出的x,y,z和这个是一回事,将求方程组解的最终形势化简和合并,最终得到一个全为向量和距离的公式,上边即为计算出此公式

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-7-2 12:55:00 | 显示全部楼层

Re:一个看不懂的计算3个平面交点方式

乘法多了速度就下来了.

其实可以不必要求焦点, 一般的碰撞检测只要能判断"是" "否"碰撞即可

求焦点就慢了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 21:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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