alanjt 发表于 2022-7-6 11:28:24

你的李没有问题。我只是好奇一种不同的方法。完全是学术性的。
 
(defun c:AvMid (/ ss lst)
;; Alan J. Thompson, 05.24.10
(if (setq ss (ssget '((0 . "ARC,LINE,*POLYLINE"))))
   ((lambda (i)
      (while (setq e (ssname ss (setq i (1+ i))))
      (setq lst (cons (vlax-curve-getPointatParam
                        e
                        (/ (+ (vlax-curve-getEndParam e)
                              (vlax-curve-getStartParam e)
                           )
                           2.
                        )
                        )
                        lst
                  )
      )
      )
      (entmakex
      (list '(0 . "POINT")
            (cons 10
                  (mapcar
                      (function
                        (lambda (f)
                        (/ (apply (function +) (mapcar (function f) lst))
                           (length lst)
                        )
                        )
                      )
                      (list car cadr caddr)
                  )
            )
      )
      )
    )
   -1
   )
)
(princ)
)

Lee Mac 发表于 2022-7-6 11:29:37

发布变体很好-让大脑工作。。。
 
但请记住,您的代码效率极低-它必须在选择集中翻腾三次,然后每次也翻腾结果列表。。。

alanjt 发表于 2022-7-6 11:32:24

啊,你说得对。我将单步执行选择集部分放在mapcar语句中纯粹是偶然的。然而,你是对的。现在,我看了一下它,它平均了点的部分,它确实在最终列表中进行了不需要的次数。我想这会教会我早上第一件事就是编码。顺便说一句,评估最终列表的好方法。

Lee Mac 发表于 2022-7-6 11:35:44

谢谢伙计

alanjt 发表于 2022-7-6 11:41:08

所以,你的地图车。。。(列表l)等同于:
(mapcar (function (lambda (x) (/ x l)))
      (apply (function mapcar)
               (cons
               (function +)
               mLst
               )
      )
)
 
这段代码就是剪切光华。我印象深刻。
               (apply (function mapcar)
                     (cons
                         (function +)
                         mLst
                     )
                )
我也做过类似的事情,但从未将mapcar应用到其中。A+
 
我想提一个建议(非常轻微)。我会浮动我的列表长度。
只是为了避免将实数除以整数。

Lee Mac 发表于 2022-7-6 11:42:58

 
没错,我只是觉得我写的方式看起来更整洁
 
 
谢谢Alan,它只适合少数情况,我记得在这里也使用了这个结构。
 
 
 
很好的捕捉-我不会想到这一点-虽然我认为vlax曲线*返回的点是双倍的,但在执行除法时,它可能会稍微提高性能,避免数据类型转换(“类型提升”,我相信-或者至少在C++中)。

alanjt 发表于 2022-7-6 11:47:25

只是确认一下。 
我以前也做过同样的事情。我只是在浏览你的代码时才注意到/想到它。
你还在学习C++吗?

Lee Mac 发表于 2022-7-6 11:51:09

 
仅控制台程序-习惯循环/条件/指针等。。我还没有考虑过以任何方式将其应用于AutoCAD,但我想说的是,我非常了解基本知识。

alanjt 发表于 2022-7-6 11:53:41

 
有趣的
你用什么作为知识库(书等)?

Lee Mac 发表于 2022-7-6 11:55:20

 
主要是一本书(由Herbert Schildt撰写),以及一些在线标题参考——但进展缓慢,因为我有点偏执于把我的系统搞砸,所以只有在我知道它完全正确时(无论如何,在处理数组/指针时)才会测试一些东西。。
页: 1 [2]
查看完整版本: LISP查找多个顶点的中点