绘制五彩雪花,新手之作
;以指定点为中心随机绘制六种雪花中的一种,大小在0.6~1.0倍间随机,颜色在七种中随机;新手之作,请勿见笑!
(defun c:yt_snow(/v1 v2 v3)
(setq v1(getvar "osmode"))
(setq v2(getvar "cmdecho"))
(setq v3(getvar "blipmode"))
(setq p1 (getpoint "\n指定雪花中心:"));注意雪花应保持一定距离,否则会造成干扰
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq n (rem (fix (abs (car p1))) 6));在6种图案中随机选择
(setq t1 (+ (*(rem (abs (+ (car p1) (cadr p1))) 1) 0.4) 0.6));大小在0.6~1.0之间随机选择
(setq m (+ 1 (rem (fix (* t1 n (abs (cadr p1)))) 255)));在255种颜色中随机选择
(command "color" m)
(cond ( (= 0 n)
(command "pline" p1 "w" 0.4 0.4 (polar p1 (/ pi 2) 5) "")
(setq p2 (polar p1 (/ pi 2) 1.8))
(setq p3 (polar p1 (/ pi 2) 3))
(command "pline" p2 (polar p2 (* 5 (/ pi 6)) 1.8) "")
(command "pline" p2 (polar p2 (/ pi 6) 1.8) "")
(command "pline" p3 (polar p3 (* 5 (/ pi 6)) 2) "")
(command "pline" p3 (polar p3 (/ pi 6) 2) "")
(command "arraypolar" (ssget "c" (polar p2 0 0.5) (polar p3 pi 0.5)) "" p1 6 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
((= 1 n)
(command "pline" p1 "w" 0.4 0.4 (polar p1 (/ pi 2) 5) "")
(setq p2 (polar p1 (/ pi 2) 1.8))
(setq p3 (polar p1 (/ pi 2) 3))
(command "pline" p2 (polar p2 (* 5 (/ pi 6)) 1.3856) "")
(command "pline" p2 (polar p2 (/ pi 6) 1.3856) "")
(command "pline" p3 (polar p3 (* 5 (/ pi 6)) 1.3856) "")
(command "pline" p3 (polar p3 (/ pi 6) 1.3856) "")
(command "arraypolar" (ssget "c" (polar p2 0 0.5) (polar p3 pi 0.5)) "" p1 6 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
((= 2 n)
(command "pline" p1 "w" 0.2 0.2 (polar p1 (/ pi 2) 5) "")
(setq p2 (polar p1 (/ pi 2) 1.6262))
(setq p3 (polar p1 (/ pi 2) 2.533))
(setq p4 (polar p1 (/ pi 2) 3.4549))
(setq p5 (polar p1 (/ pi 2) 4.3595))
(command "pline" p2 (polar p2 (* 3 (/ pi 4)) 1.6262) "")
(command "pline" p3 (polar p3 (* 3 (/ pi 4)) 1.2672) "")
(command "pline" p4 (polar p4 (* 3 (/ pi 4)) 0.9612) "")
(command "pline" p5 (polar p5 (* 3 (/ pi 4)) 0.6610) "")
(command "mirror" (ssget "c" (polar p2 pi 0.1) (polar p5 (* 3 (/ pi 4)) 0.6610)) "" p1 p5 "N")
(command "arraypolar" (ssget "c" (polar p2 0 0.5) (polar p5 (* 3 (/ pi 4)) 0.6610)) "" p1 8 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
((= 3 n)
(command "pline" p1 "w" 0.2 0.2 (polar p1 (/ pi 2) 5.0621) "")
(setq p2 (polar p1 (/ pi 2) 1.6425))
(setq p3 (polar p1 (/ pi 2) 2.4152))
(setq p4 (polar p1 (/ pi 2) 4.0147))
(setq p5 (polar p3 (* pi 0.75) 1.9043))
(setq p6 (polar p3 (* pi 0.75) 1.0421))
(command "pline" p2 (polar p2 (* pi 1.25) 0.8502) "")
(command "pline" p3 p5 "")
(command "pline" p6 (polar p6 pi 0.8669) "")
(command "pline" p6 (polar p6 (/ pi 2) 0.8669) "")
(command "pline" p4 (polar p4 (* pi 0.75) 0.9244) "")
(command "mirror" (ssget "c" (polar p1 pi 0.1) (polar p5 (/ pi 2) 1)) "" p1 p4 "N")
(command "arraypolar" (ssget "c" (polar p1 0 1.5) (polar p5 (/ pi 2) 1)) "" p1 6 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
((= 4 n)
(command "pline" p1 "w" 0.2 0.2 (polar p1 (/ pi 2) 5.3817) "")
(setq p2 (polar p1 (/ pi 2) 0.9731))
(setq p3 (polar p1 (/ pi 2) 2.1459))
(setq p4 (polar p1 (/ pi 2) 3.2399))
(setq p5 (polar p1 (/ pi 2) 4.3489))
(command "pline" p2 (polar p2 (* pi 0.75) 1.5141) "")
(command "pline" p3 (polar p3 (* pi 0.75) 1.5592) "")
(command "pline" p4 (polar p4 (* pi 0.75) 1.3053) "")
(command "pline" p5 (polar p5 (* pi 0.75) 0.8244) "")
(command "mirror" (ssget "c" (polar p1 pi 0.1) (polar p5 (* pi 0.75) 0.8244)) "" p1 p5 "N")
(command "arraypolar" (ssget "c" (polar p1 0 1) (polar p5 (* pi 0.75) 0.8244)) "" p1 6 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
((= 5 n)
(command "pline" p1 "w" 0.2 0.2 (polar p1 (/ pi 2) 5.4448) "")
(setq p2 (polar p1 (/ pi 2) 1.6816))
(setq p3 (polar p1 (/ pi 2) 2.6329))
(setq p4 (polar p1 (/ pi 2) 3.5759))
(setq p5 (polar p1 (/ pi 2) 4.5340))
(command "pline" p2 (polar p2 (* pi (/ 136.0666 180)) 1.6184) "")
(command "pline" p3 (polar p3 (* pi (/ 136.0666 180)) 1.3206) "")
(command "pline" p4 (polar p4 (* pi (/ 136.0666 180)) 0.9725) "")
(command "pline" p5 (polar p5 (* pi (/ 136.0666 180)) 0.6660) "")
(command "mirror" (ssget "c" (polar p1 pi 0.1) (polar p5 (* pi (/ 136.0666 180)) 0.6660)) "" p1 p5 "N")
(command "arraypolar" (ssget "c" (polar p1 0 0.5) (polar p5 (* pi (/ 136.0666 180)) 0.6660)) "" p1 12 360 "")
(command "scale" (ssget "c" (polar p1 (* -0.25 pi) 7.8) (polar p1 (* 0.75 pi) 7.8)) "" p1 t1)
)
)
(setvar "osmode" v1)
(setvar "cmdecho" v2)
(setvar "blipmode" v3)
(princ)
)
世界上没有相同的两片雪花 有意思的工具,谢谢分享。 666!好玩儿! 很棒!楼主对雪花形状很有研究! 再从上往下落,左右随机移动,随机旋转角度。 VBALISPER 发表于 2025-2-21 08:13
再从上往下落,左右随机移动,随机旋转角度。
想法很好,但有点超出我的能力范围了;P Myday 发表于 2025-2-21 07:49
很棒!楼主对雪花形状很有研究!
网上查的图片,照着描的 考虑代码的通用性,没有用这个生成随机数:
挺有意思的,感谢分享
页:
[1]
2