测试结果:

主要思路:假设有两条曲线分别是c1和c2,把c1按照1的距离划分我这里用变量jd表示,得到一个曲线集合coll,然后遍历coll,得到coll中每一个曲线的两个端点,再用这两个端点分别求离曲线c2的最短距离,直接使用开发库的GetClosestPointTo方法就可以了,直到遍历完整个coll集合就能得到最短距离和其对应的点。

主要代码得到曲线集合coll:

 public List<Curve> GetCurves(Curve curve ,double jd)
{
List<Curve> lstCurves = new List<Curve>(); double totalLength = curve.GetDistanceAtParameter(curve.EndParam); if (totalLength < jd)
{
lstCurves.Add(curve);
return lstCurves;
}
double addLength = ; Point3dCollection pt3dCol = new Point3dCollection(); while (addLength < totalLength)
{
pt3dCol.Add(curve.GetPointAtDist(addLength));
addLength += jd; }
if (addLength != totalLength)
pt3dCol.Add(curve.GetPointAtDist(totalLength)); DBObjectCollection dbObjColl= curve.GetSplitCurves(pt3dCol); foreach (var item in dbObjColl)
{
lstCurves.Add((Curve)item);
} dbObjColl.Dispose(); return lstCurves;
}

主要代码得到最短距离和最近点:

public Line GetMinLine(Curve curve1,Curve curve2,double jd)
{
List<Curve> lstCurves = GetCurves(curve1, jd); double minVal = double.MaxValue;
Point3d ptMin1 = Point3d.Origin;
Point3d ptMin2 = Point3d.Origin;
foreach (var c in lstCurves)
{
Point3d pt1 = c.StartPoint;
Point3d pt2 = c.EndPoint; var pt11=curve2.GetClosestPointTo(pt1, false);
var pt22= curve2.GetClosestPointTo(pt2, false); var l1 = pt11.DistanceTo(pt1);
var l2 = pt22.DistanceTo(pt2); if (l1 < minVal)
{
minVal = l1;
ptMin1 = pt11;
ptMin2 = pt1;
}
if (l2 < minVal)
{
minVal = l2;
ptMin1 = pt22;
ptMin2 = pt2;
} }
ed.WriteMessage("\n最短距离:" + minVal + "\n"); return new Line(ptMin1,ptMin2);
}

关于GetClosestPointTo介绍如下:

最新文章

  1. Mac iTerm 很好用的终端
  2. Web学习之css
  3. C#套接字和windowsAPI套接字
  4. Oracle介绍(初学者必须知道的)
  5. confirm确认对话框
  6. SpringMVC系列之基本配置
  7. iOS 开发 证书总结 开发证书和生产证书的区别
  8. POJ3691DNA repair
  9. Java基础知识强化17:JAVA不可以将所覆盖的方法的访问权限变得比父类的小
  10. unity3d NGUI入门(描述和使用插件参数)
  11. java知识点梳理
  12. (转)ZXing解析二维码
  13. TensorBoard的使用(结合线性模型)
  14. 【转】nagios使用带url的check_http检测主机
  15. WebSocket 聊天室加自制服务器
  16. 文本分布式表示(一):word2vec理论
  17. Python——阶段总结(一)
  18. 安装版本( 相关关系 Vue SSR 指定版本)
  19. 在C++中,setw(int n)
  20. c# 多线程的几种方式

热门文章

  1. bzoj4152 The Captain
  2. LeetCode97 Interleaving String
  3. Kubernetes1.3新特性:新的资源回收控制器
  4. Java练习 SDUT-1200_汉诺塔
  5. jmeter循环取消今天所有的订单
  6. 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台
  7. 添加ODBC数据源
  8. python unittest 框架添加测试用例及运行
  9. @atcoder - ABC133F@ Colorful Tree
  10. vue3——vue数据循环渲染