C++求线段和平面的交点

线段AB和平面P的交点我们这里用到点到平面垂直距离的函数,求点到平面垂直距离的使用的是opengl.org官方介绍的osg图形库的3d向量类,对点乘叉乘等向量运算进行了包装,header only.

            a

----------o-------c-------

                               b

 

o是平面原点,n是单位法向量,p是点

double distPoint3dPlane3d(osg::Vec3d o,osg::Vec3d n,osg::Vec3d p);

则计算点a到平面的距离da,点b到平面距离db

如果a乘以b小于0说明a点和b点分别在平面两侧(da小于0同时db大于0 或者 da大于0同时db小于0,则线段和平面有交点c,则根据线性插值关系

t=da/(da-db);

c=a*(1.0-t)+b*t;

显然da越小,交点越靠近a

实现的函数就不打字了

bool lineABPlaneIntersect(Vec3d a,Vec3d b, Vec3d o,Vec3d n,Vec3d& c)

{...}

 

posted @ 2021-08-18 23:07  abcstar  阅读(616)  评论(0编辑  收藏  举报