请大神们指点一下,怎么快速求出这两条闭合线两端的交点坐标(已解决)
本帖最后由 永不言弃 于 2023-7-10 11:13 编辑请大神们指点一下,怎么快速求出这两条闭合线两端的两个交点坐标
本帖最后由 永不言弃 于 2023-7-10 11:27 编辑
xyp1964 发表于 2023-7-9 22:35
起点在哪里都可以处理
院长真牛,那个起点标记真是炫,我用了一个笨办法处理了,先求出两条线共同的坐标点,然后再判断起点是否在中间,最后计算出两端点,就是线的点太多,每条基本都是300个点以上的,计算有点慢
求交后再取前后两个点的坐标
本帖最后由 vitalgg 于 2023-7-9 15:54 编辑
(defun c:tt ()
(setq pts1 (curve:get-points (car (entsel "第1条曲线"))))
(setq pts2 (curve:get-points (car (entsel "第2条曲线"))))
(setq res (list:intersect pts1 pts2))
;; 判断pts2 起点是否在 res内,如果是,则调整 res,
;; 然后 测试pts2 的第二点 直到不是为止
(if (list:member (car pts2) res 0.001)
(progn
(setq i 0)
(while (list:member (nth i pts2) res 0.001)
(setq res (reverse res))
(setq res (append (cdr res) (list (car res))))
(setq res (reverse res))
(setq i (1+ i))
)
)
)
;; 两端点作一直线
(entity:make-line (car res) (last res))
)
命令: (fun:usage 'list:intersect)
*** 函数名:list:intersect
---------------
说明: 求两个列表集合的交集
用法: (list:intersect lst1 lst2)
参数: 1 lst1: 列表;2 lst2: 列表;
返回值: List
示例:
命令: (fun:usage 'curve:get-points)
*** 函数名:curve:get-points
---------------
说明: 曲线控制点及端点列表,返回点坐标。
用法: (curve:get-points ent)
参数: 1 ent: 单个图元;
返回值: 点坐标列表
示例: (curve:get-points (car (entsel)))
https://atlisp.cn/static/videos/intersect.mp4
多段线起点在重合边界的测试:
https://atlisp.cn/static/videos/intersect2.mp4
xyp1964 发表于 2023-7-9 14:22
求交后再取前后两个点的坐标
估计与线的起点位置有关,有时候会乱
vitalgg 发表于 2023-7-9 14:30
看了你的很多帖子,目前还没搞明白CAD应用云是怎么用的,我是业余的,没事时研究研究 永不言弃 发表于 2023-7-9 14:58
看了你的很多帖子,目前还没搞明白CAD应用云是怎么用的,我是业余的,没事时研究研究
到 https://atlisp.cn 安装核心程序。
就可以运行上面提供的代码了。
多段线起点在重合边界的问题已修补。
vitalgg 发表于 2023-7-9 15:51
到 https://atlisp.cn 安装核心程序。
永不言弃 发表于 2023-7-9 14:44
估计与线的起点位置有关,有时候会乱
按所给图测试没问题,看动图 xyp1964 发表于 2023-7-9 17:43
按所给图测试没问题,看动图
谢谢院长,处理好了 起点在哪里都可以处理
页:
[1]
2