明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4749|回复: 24

[讨论] (求助)把所有点连接可以是多段线段,但是要和最小。如何思考?

[复制链接]
发表于 2018-4-26 17:52:21 | 显示全部楼层 |阅读模式
求助各位大神:把下图所有点连接可以是多段线段,但是要和最小。如何思考?用lisp如何实现呢?

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-11-14 00:43:13 | 显示全部楼层
(defun fp ()
    (setq sn (ssget ":N" '((0 . "point"))))
    (setq i 0 n (sslength sn) plst nil)
    (while (< i n)
        (setq plst (cons (cons (+ i 1) (cdr (assoc 10 (entget (ssname sn i))))) plst))
        (setq i (+ i 1))
    )
   (reverse plst)
)
(defun mindist (alst blst)
  (setq dlst nil)
  (foreach a alst
       (foreach b blst
            (setq dlst (cons (list (car a) (car b) (distance (cdr a) (cdr b)))  dlst))
        )
  )
  (setq qlst (car (vl-sort dlst '(lambda(a b) (< (last a) (last b)) ) )))
  qlst
)
(defun c:tt ()
   (setq ptlst (fp))
   (setq vlst (list (car ptlst)) rlst (cdr ptlst))
   (while (not (null rlst))
          (setq qlst (mindist vlst rlst))
          (command "line" (cdr (assoc (car qlst) vlst)) (cdr (assoc (cadr qlst) rlst)) "" )
          (setq vlst (cons (assoc (cadr qlst)  rlst) vlst))
          (setq rlst (vl-remove (assoc (cadr qlst)  rlst) rlst))
   )
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2018-5-2 10:18:21 | 显示全部楼层
;最关键的点表对点表最短的求法,如下:(defun ptsort (lsta lstb / i ia mina nia pmina pmind)
  (setq pmina (list (car lsta) (car lstb)))
  (setq pmind (apply
                'distance
                pmina
              )
  )
  (setq i 0)
  (repeat (length lsta)
    (setq ia (nth i lsta))
    (setq mina (apply
                 'distance
                 (zg-nearestpt ia lstb)
               )
    )
    (if (> pmind mina)
      (progn
        (setq pmind mina)
        (setq nia (list ia (cadr (zg-nearestpt ia lstb))))
      )
    )
    (setq i (+ i 1))
  )
  nia
)


;只是实现了,还望各位大侠改进算法技巧什么的。多拍砖!
 楼主| 发表于 2018-4-27 19:56:56 | 显示全部楼层
感谢xyp1964院长的回复, 全部封闭的连接论坛里确实也有案例了。现在要的是所有点连接到,但是不一定是一条pline 可是是很多线段,只是要把所有连接好之后线段总和是最小的。
 楼主| 发表于 2018-4-26 17:54:39 | 显示全部楼层
3-5个点是比较好判断出来,但是很多点的时候就不知怎样下手了。
发表于 2018-4-26 18:01:45 | 显示全部楼层
感觉这种问题首先先得去找到算法,编程倒是小事。
 楼主| 发表于 2018-4-26 18:40:56 | 显示全部楼层
是那种算法比较合适呢?如果不是多段线段的论坛当中比较多(就是一条pl线连接的比较多)。
发表于 2018-4-26 18:43:13 | 显示全部楼层
先以某种条件确定一个点为其实点。
其他的点,做个循环。
理论上,最近的点相连,线的长度是最短的。
发表于 2018-4-27 10:12:41 | 显示全部楼层
最小路径问题
发表于 2018-4-27 12:18:59 | 显示全部楼层
没法思考时试着增加限定条件 比如指定起始点 增加两点连接的原则。。。
 楼主| 发表于 2018-4-27 15:55:19 | 显示全部楼层
感觉是点表和点表的最短是怎样求呢?感觉是这个。
发表于 2018-4-27 17:55:25 | 显示全部楼层

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 05:22 , Processed in 0.171428 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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