xufansw 发表于 2016-5-21 11:41:14

已知两个点和一条多段线(两点连线和多段线必有1个交点),跪求大神找交点的最快方法

各位大神:
            如图,这根多段线是由多跟直线合并成的,目前我的办法是将Pt1和Pt2两个点画线,通过下面的程序求出交点,求出后保存画线到一个集合里,并保存此交点,后面删除画线集合。但是如果数量大的话计算机处理就会好慢(估计画线用时太多,我已经是用entmake语句画线了),还请各位大神不吝赐教,帮小弟想想用什么方法会快一些。

(defun jd(se sn)
(setq sn_obj(vlax-ename->vla-object sn))
(setq se_obj(vlax-ename->vla-object se))
(setq pj(vlax-invoke sn_obj 'intersectwith se_obj 0))
)

magicheno 发表于 2023-12-12 16:56:09

感谢大佬分享

kozmosovia 发表于 2016-5-21 20:47:21

本帖最后由 kozmosovia 于 2016-5-21 20:48 编辑

数量大就需要忍受所谓的慢,我也不觉得会慢多少。
不需要把新画的线存成选择集,计算完成直接entdel
人操作行为本身的速度才叫真正的慢

自贡黄明儒 发表于 2016-5-22 14:12:08

纯数学方法肯定要快些。intersectwith考虑很多情况。如果多段线中没孤,情况就简单多了。已知两点与多段线求交点,可以不生成直线的

xufansw 发表于 2016-5-23 14:22:27

自贡黄明儒 发表于 2016-5-22 14:12 static/image/common/back.gif
纯数学方法肯定要快些。intersectwith考虑很多情况。如果多段线中没孤,情况就简单多了。已知两点与多段线求 ...

是的,多段线中的圆弧已经处理成直线了的,纯数学的方法是指什么什么方法,还请帮忙大神指点一下迷津

自贡黄明儒 发表于 2016-5-23 14:50:06

取得多段线各点,然后用inters

xufansw 发表于 2016-5-23 15:14:41

自贡黄明儒 发表于 2016-5-23 14:50 static/image/common/back.gif
取得多段线各点,然后用inters

这个方法一开始我想过,但是和多段线相交的那两个相关的点不好找。我有一个想法,还是画线,只画一次然后每次循环的时候改变起始点和终点,这样应该会快一些吧

kozmosovia 发表于 2016-5-23 15:26:41

如果多线段有很多段,inters的循环也会消耗大量时间,最后可能不一定有直接intersectiwith快。
画线修改和重新画线,如果你的多线段数量不是上万的,我感觉对速度影响不大。否则从理论上,修改比新建是要节省资源而速度更快

xufansw 发表于 2016-5-23 15:28:29

kozmosovia 发表于 2016-5-23 15:26 static/image/common/back.gif
如果多线段有很多段,inters的循环也会消耗大量时间,最后可能不一定有直接intersectiwith快。
画线修改和 ...

几十万。。。

kozmosovia 发表于 2016-5-23 15:32:26

那你那个几十万对的直线端点是怎么生成的?

xufansw 发表于 2016-5-23 15:54:58

kozmosovia 发表于 2016-5-23 15:32 static/image/common/back.gif
那你那个几十万对的直线端点是怎么生成的?

将多段线按照一定的距离等分点的集合
页: [1] 2
查看完整版本: 已知两个点和一条多段线(两点连线和多段线必有1个交点),跪求大神找交点的最快方法