vormittag 发表于 2022-11-18 11:43:55

delaunay 三角划分的 lisp 代码

好久不上论坛了,今天重新上来冒个泡,贴一段关于delaunay 三角划分的代码。

论坛上从前有很多关于 delaunay 三角网划分的帖子和很多好程序,如:
飞马兄的帖子:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91189&fromuid=398403
highflybird 兄的帖子:
http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=82644&pid=434713&fromuid=398403

这些程序运行的效率非常高,但是是用 arx 编写的,或者借助了外部 Matlab 程序。我这里写了一个 AutoLisp/VisualLisp 版的,正如 highflybird 兄所说,“如果离散点数量太多,LISP算法再优化,也是不可能很快的。”我的机器比较老,CPU 还是 第三代 i7,测试下来,11000 多个点在 270s 左右;在另一台第 12 代 i7 的机器上测试下来是91s,时间勉强能够接受。

我使用的算法是扫描线算法,在代码的注释中作出了解释。通过测试,在达到一定数量的点后,花费的时间基本是线性增长的,因此也就没再去考虑分治算法。代码中用一个参数来控制使用水平线扫描还是垂直线扫描,其实这可以通过对散点坐标的最值判断分布的形状来进行选择,这个可以自行修改。

我不喜欢收币,免币开放,代码如下:

vormittag 发表于 2022-11-21 09:46:15

一张单程票 发表于 2022-11-19 19:04
no function definition: ACET-UI-PROGRESS,请问大神,这个函数是什么函数

这个是express tools 带的,生成进度条,如果你没装expresstools 就把三处用到这个函数的地方注释掉好了,没有关系的。或者前面简单地加一句 (defun acet-ui-progress list)

vormittag 发表于 2022-11-21 09:49:05

guosheyang 发表于 2022-11-19 11:43
朋友怎么有高程的点生成的三角网 是平的呢?

三角网返回值是带高程的,绘图的子函数用的是画平面的,想要画带高程的 3d 三角网就自己用写一个创建 3dface 或 polyline 的子函数。没有多复杂。

guosheyang 发表于 2022-11-19 11:43:41

本帖最后由 guosheyang 于 2022-11-19 11:46 编辑

朋友怎么有高程的点生成的三角网 是平的呢?

lxl217114 发表于 2022-11-18 12:23:48

谢谢大佬分享

hzyhzjjzh 发表于 2022-11-18 12:32:51


谢谢大佬分享:victory:

行天下 发表于 2022-11-18 13:06:29

谢谢大佬分享

freedom_ice 发表于 2022-11-18 15:01:32

优秀,学习。

hhh454 发表于 2022-11-19 06:51:34

感谢楼主分享,学习

技术工作室 发表于 2022-11-19 08:11:01

楼主给力,谢谢分享!!!

tigcat 发表于 2022-11-19 11:19:55

谢谢大侠分享

一张单程票 发表于 2022-11-19 19:04:26

no function definition: ACET-UI-PROGRESS,请问大神,这个函数是什么函数
页: [1] 2
查看完整版本: delaunay 三角划分的 lisp 代码