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)
{...}