yjwht 发表于 2025-2-20 10:27:26

绘制五彩雪花,新手之作

;以指定点为中心随机绘制六种雪花中的一种,大小在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)
)


朦胧Design 发表于 2025-2-20 10:47:03

世界上没有相同的两片雪花

lxl217114 发表于 2025-2-20 11:54:02

有意思的工具,谢谢分享。

nsh935 发表于 2025-2-20 15:22:02

666!好玩儿!

Myday 发表于 2025-2-21 07:49:27

很棒!楼主对雪花形状很有研究!

VBALISPER 发表于 2025-2-21 08:13:36

再从上往下落,左右随机移动,随机旋转角度。

yjwht 发表于 2025-2-21 13:32:33

VBALISPER 发表于 2025-2-21 08:13
再从上往下落,左右随机移动,随机旋转角度。

想法很好,但有点超出我的能力范围了;P

yjwht 发表于 2025-2-21 13:34:02

Myday 发表于 2025-2-21 07:49
很棒!楼主对雪花形状很有研究!

网上查的图片,照着描的

yjwht 发表于 2025-2-21 20:26:21

考虑代码的通用性,没有用这个生成随机数:

Qwer1243 发表于 2025-2-23 14:56:22

挺有意思的,感谢分享
页: [1] 2
查看完整版本: 绘制五彩雪花,新手之作