明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 725|回复: 12

[求助] 求lisp处理方法

[复制链接]
发表于 2024-9-4 16:32:18 | 显示全部楼层 |阅读模式
1明经币
已知平面有限个点,用直线连接这些点,不能成环,使连接这点的线长度和最小。并绘出连接图。

最佳答案

查看完整内容

(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) (c ...
发表于 2024-9-4 16:32:19 | 显示全部楼层
leeli 发表于 2024-9-5 22:30
是的  ,无向有权最小生成树

(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))
   )
)

点评

我看错了  发表于 2024-9-13 00:22
每次找最近点不就是最小生成树的算法吗?  发表于 2024-9-12 17:02
我检查了一下,你这个还不是最小树啊?你只是最近点排序!  发表于 2024-9-12 16:29
回复

使用道具 举报

发表于 2024-9-5 17:43:01 | 显示全部楼层
你可能需要的是最小生成树的算法吧?

或者斯坦纳树?
回复

使用道具 举报

发表于 2024-9-5 21:59:37 | 显示全部楼层
在论坛里搜索:点连线,看看有没有你想要的。
回复

使用道具 举报

 楼主| 发表于 2024-9-5 22:30:09 | 显示全部楼层
highflybird 发表于 2024-9-5 17:43
你可能需要的是最小生成树的算法吧?

或者斯坦纳树?

是的  ,无向有权最小生成树
回复

使用道具 举报

 楼主| 发表于 2024-9-12 11:08:40 | 显示全部楼层
mahuan1279 发表于 2024-9-4 16:32
(defun fp ()
    (setq sn (ssget ":N" '((0 . "point"))))
    (setq i 0 n (sslength sn) plst nil) ...

谢谢 我学习学习 ,我没想出来,都准备去弄VBA了
回复

使用道具 举报

 楼主| 发表于 2024-9-12 16:31:32 | 显示全部楼层
mahuan1279 发表于 2024-9-4 16:32
(defun fp ()
    (setq sn (ssget ":N" '((0 . "point"))))
    (setq i 0 n (sslength sn) plst nil) ...

最小树要数组算的!
回复

使用道具 举报

发表于 2024-9-12 17:04:07 | 显示全部楼层
leeli 发表于 2024-9-12 16:31
最小树要数组算的!

万物皆可表。
回复

使用道具 举报

 楼主| 发表于 2024-9-12 18:04:08 | 显示全部楼层

我开始也是你这样写的 ,不对,还要考虑前面点的关系
回复

使用道具 举报

发表于 2024-9-12 18:17:47 | 显示全部楼层
leeli 发表于 2024-9-12 18:04
我开始也是你这样写的 ,不对,还要考虑前面点的关系

你看了最小生成树算法了吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 20:10 , Processed in 0.198091 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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