计算三维空间线真实交点


Mstn SDK中有各种各样求两条曲线之间交点的接口,其中有老式的C函数,例如mdlIntersect_allBetweenElms,mdlIntersect_allBetweenElms2,mdlIntersect_allBetweenExtendedElms等。新封装的C/C++类函数有CurveCurve:: IntersectionsXY等。这些接口虽然能计算出两条曲线之间的交点,但是从头文件中函数的注释可以看出来,返回的交点并非是两条曲线的真实交点,如下所示:

通过函数注释可以得知这个交点是沿指定方向(由另外一个参数rotMatrix指定)投影到平面后,两条曲线在平面上的交点。那么该如何获取两条曲线的真实交点呢?我们可以看到mdlIntersect_allBetweenElms的前两个参数类型为DPoint3dP,而且是“out”类型的。这两个参数返回的是在两条曲线上的交点,什么意思呢?就是沿指定方向投影后的交点,分别再投影到两条曲线上以后的点。我们可以通过判断这两个点的Z坐标值是否相等进而得知这个交点是否是两条曲线的真实交点。