http://maruf.ca/rade/web/Finding_the_minimum_distance_between_two_objects.htm
1.创建一个"CreateDistanceMin"函数
![](https://img.haomeiwen.com/i15269057/8bbabcf1b932684b.png)
在这里,我们看到有三种方法。在本示例中使用了第一种方法。我们需要一个CATGeoFactory对象,一个CATPoint对象,一个CATCurve对象,并且需要定义一个CATSkillVAlue模式。
CATGeoFactory* piGeomFactory = ::CATCreateCGMContainer() ;
if (NULL==piGeomFactory) return (1);
2.创建一个CATGeoFactory对象。该对象用于创建和检索有关对象的信息。
3.创建一个CATPoint对象。为此,必须使用CATGeoFactory对象中包含的方法之一创建一个点,并将其转换为CATPoint。
CATCartesianPoint * piPoint = piGeomFactory->CreateCartesianPoint(5.5,7,-6.5);
CATPoint * pntPointer = (CATPoint*)piPoint;
4.创建一个CATCurve对象。为此,必须按照步骤3中的概述创建两个CATPoint对象,并使用CATGeoFactory对象使用这两个点作为输入来创建一条线。您可以使用包含在CATGeoFActory中的其他曲线类型,只要将其转换为CATCurve。
CATCartesianPoint * piPoint1 = piGeomFactory->CreateCartesianPoint(3,2,-1);
CATCartesianPoint * piPoint2 = piGeomFactory->CreateCartesianPoint(7,6,8);
CATPoint * pPoint1 = (CATPoint*)piPoint1;
CATPoint * pPoint2 = (CATPoint*)piPoint2;
CATLine * piLine = piGeomFactory->CreateLine(pPoint1, pPoint2);
CATCurve * piCurve = (CATCurve*)piLine;
5.对于最后一个参数,您有两个选项,BASIC或ADVANCED。为了我们的目的,我们将使用BASIC模式。现在,我们可以计算最小距离了。
CATDistanceMinPtCrv *mindist = ::CreateDistanceMin(piGeomFactory,piPoint,piCurve,BASIC);
printf("%lf",mindist->GetDistance());
现在,可以使用CATDistanceMinPtCrv对象的-> GetDistance()方法访问最小距离。还有其他几种距离方法,可使用与此处概述的方法类似的方法来找到对象之间的最小距离。
CATDistanceMinBodyBody-查找两个物体之间的最小距离
CATDistanceMinCrvCrv-查找两条曲线之间的最小距离
CATDistanceMinPtSur-查找点与曲面之间的最小距离
网友评论