明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1269|回复: 4

[函数] 寻找线段回路

[复制链接]
发表于 2022-8-22 23:11:32 | 显示全部楼层 |阅读模式
本帖最后由 kkq0305 于 2022-8-23 07:05 编辑

输入线段点表,输出回路表

例:(setq lst '((0 . 1) (1 . 2) (2 . 4) (5 . 6) (6 . 1) (1 . 8) (8 . 9) (10 . 6) (6 . 2) (2 . 8) (8 . 10)))
(tt1 lst)--->>>(((6 . 10) (10 . 8) (8 . 2) (2 . 6)) ((6 . 2) (2 . 1) (1 . 6)) ((1 . 2) (2 . 8) (8 . 1)) ((1 . 8) (8 . 10) (10 . 6) (6 . 1)))
  1. (defun tt1 (lst)
  2.   (setq  lst4 (tt lst)
  3.   lst5 nil
  4.   )
  5.   (while lst4
  6.     (setq e1   (car lst4)
  7.     lst6 (list (list e1))
  8.     loop t
  9.     )
  10.     (while loop
  11.       (setq a    (cdr e1)
  12.       b    (cons a (car e1))
  13.       e2lst (vl-remove-if-not
  14.         '(lambda (x) (or (equal b x) (= (car x) a)))
  15.         lst4
  16.       )
  17.       e2    (car e2lst)
  18.       )
  19.       (cond ((null e2)
  20.        (if (cdr lst6)
  21.          (setq lst4 (vl-remove e1 lst4)
  22.          lst6 (if (cdar lst6)
  23.           (cons (cdar lst6) (cdr lst6))
  24.           (cdr lst6)
  25.         )
  26.          e1    (caar lst6)
  27.          )
  28.          (setq lst4 (vl-remove e1 lst4)
  29.          e1    (car lst4)
  30.          )
  31.        )
  32.       )
  33.       ((assoc (cdr e2) (apply 'append lst6))
  34.        (setq lst5  (cons (setq lst6 (ff2 (reverse lst6) e2)) lst5)
  35.        loop  nil
  36.        )
  37.        (foreach n lst6 (setq lst4 (vl-remove n lst4)))
  38.       )
  39.       (t
  40.        (setq e1  e2
  41.        lst6  (cons e2lst lst6)
  42.        )
  43.       )
  44.       )
  45.     )
  46.   )
  47.   lst5
  48. )
  49. (defun tt (lst / lst1 lst2 lst3 lst4)
  50.   (setq  lst1 (mapcar 'car lst)
  51.   lst2 (mapcar 'cdr lst)
  52.   lst3 (vl-remove-if-not '(lambda (x) (member x lst2)) lst1)
  53.   lst4 (vl-remove-if-not
  54.          '(lambda  (x)
  55.       (and (member (car x) lst3) (member (cdr x) lst3))
  56.     )
  57.          lst
  58.        )
  59.   )
  60.   (append lst4
  61.     (mapcar '(lambda (x) (cons (cdr x) (car x))) lst4)
  62.   )
  63. )
  64. (defun ff2 (lst6 e2 / lst6 y lst1 lst2)
  65.   (setq ff   (lambda (lst a)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 3明经币 +3 收起 理由
zm880928 + 1 很给力!
tigcat + 1 kk哥代码先顶再看
guosheyang + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2022-8-23 07:06:02 | 显示全部楼层
ff函数加载顺序错了   
发表于 2022-8-23 15:22:46 | 显示全部楼层
最小围区算法,费脑;
最后FF函数代码没贴全
发表于 2022-8-25 13:27:30 | 显示全部楼层
xuningxu 发表于 2022-8-23 15:22
最小围区算法,费脑;
最后FF函数代码没贴全

感觉不加入坐标或提前计算出“最小角”(不包含其它方向)的话,无法判断是不是最小环,纯数学只能解决到这里
发表于 2022-9-5 17:09:39 | 显示全部楼层
ff2码不全吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 17:05 , Processed in 0.186842 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表