Hippe013 发表于 2022-7-5 22:21:52

新颖Lisp程序

我附加了一个新颖的lisp程序,它使用对象反应器将几个圆连接在一起,形成一个蛇型图形。蛇头是使用grread操纵的。
 
两个主要功能是“Snake”和“Snake2”。
 
这只是最初的想法。(更多圆圈)
 
蛇2:是更少的圆圈,但圆圈可以推动其他圆圈。(当我在这个圆上添加太多的圆时,AutoCAD不太喜欢它)
 
我希望你喜欢!
 
当做
 
Hippe013
蛇LSP

marko_ribar 发表于 2022-7-5 22:40:35

Hippe013,我能说什么。。。Awaysome。。。这两个版本简直太棒了。。。只有一件事,在lisp的末尾添加(princ),它将删除作为输出的文本重复。。。我必须承认我没有太多使用反应堆,但这一个是完美的。。。
 
祝你一切顺利,M.R。

Hippe013 发表于 2022-7-5 22:42:01

谢谢Marko!我有一个同事说这是一个很好的减压工具。我不得不称赞李,因为我受到了他的启发。lsp和他对mapcar和lambda的巧妙使用,我现在终于开始理解和更频繁地使用了。

Lee Mac 发表于 2022-7-5 22:53:10

好主意,嬉皮士-谢谢你的赞誉,我很高兴能激励你!
 
如果你想寻求建议,我个人会避免在这项任务中使用反应堆,例如:

(defun c:snake ( / c1 cl el gr p1 r1 r2 rl vs )
   (if (setq p1 (getpoint "\nClick to generate the snake! "))
       (progn
         (setq vs (getvar 'viewsize)
               r1 (/ vs (LM:randrange 30 80))
         )
         (repeat 20
               (setq el (cons (cons -1 (entmakex (list '(0 . "CIRCLE") (cons 10 p1) (cons 40 r1) (cons 62 (logand (LM:randrange 2 255) (~ 1)))))) el)
                     cl (cons p1 cl)
                     rl (cons r1 rl)
                     r2 (/ vs (LM:randrange 30 80))
                     p1 (cons (- (car p1) r1 r2) (cdr p1))
                     r1 r2
               )
         )
         (setq el (reverse el)
               cl (reverse cl)
               rl (reverse rl)
         )
         (while (= 5 (car (setq gr (grread t 13 0))))
               (entmod (list (car el) (cons 10 (setq c1 (cadr gr)))))
               (setq cl
                   (cons c1
                     (mapcar
                        '(lambda ( a b c d )
                               (entmod (list a (cons 10 (setq c1 (polar c1 (angle c1 c) (+ b d))))))
                               c1
                           )
                           (cdr el) (cdr rl) (cdr cl) rl
                     )
                   )
               )
         )
       )
   )
   (princ)
)

;; Rand-Lee Mac
;; PRNG implementing a linear congruential generator with
;; parameters derived from the book 'Numerical Recipes'

(defun LM:rand ( / a c m )
   (setq m   4294967296.0
         a   1664525.0
         c   1013904223.0
         $xn (rem (+ c (* a (cond ($xn) ((getvar 'date))))) m)
   )
   (/ $xn m)
)

;; Random in Range-Lee Mac
;; Returns a pseudo-random integral number in a given range (inclusive)

(defun LM:randrange ( a b )
   (fix (+ a (* (LM:rand) (- b a -1))))
)
(princ)

hanhphuc 发表于 2022-7-5 23:06:32

创意不错!!好的激励!
我更喜欢实时entmod,但很少看到反应堆的例子,很好的方法!谢谢大家分享!
嬉皮士和李你们都应该得到荣誉

Pietari 发表于 2022-7-5 23:15:43

@Hippe013:多酷的想法,这么好的代码。做得好!

CADMASTER1128 发表于 2022-7-5 23:22:57

可以在AutoCAD中运行“Snake”游戏吗?谈谈新奇的LSP!
页: [1]
查看完整版本: 新颖Lisp程序