明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2934|回复: 13

曾经想写的“花”程序,现在实现了,比以前设想的更漂亮!

  [复制链接]
发表于 2012-6-1 14:29:07 | 显示全部楼层 |阅读模式
这个东西我们小时候肯定用圆规画过吧?!曾经想使用LISP来绘制,刚开始却画不出来,现在可以了,而且花瓣颜色还不一样哦,有兴趣的话可以尝试一下如何做到颜色随机

以下是代码,本来想写一些注释给新手看,但我一看就那个几个函数,没有特别好的思路,就不写了,不明白函数的看帮助吧,也可以提出来,我可以解答。
(defun c:hua (/ p0 r p1 p2 p3 p4 p5 p6 os_mode)
  ;;用于给各点赋值,p0是中心点 r是圆的半径
  (setq p0 (getpoint "\n请输入中心点")
r  (getdist p0 "\n请输入半径")
p1 (polar p0 (* pi (/ 1 6.0)) r)
p2 (polar p0 (* pi (/ 3 6.0)) r)
p3 (polar p0 (* pi (/ 5 6.0)) r)
p4 (polar p0 (* pi (/ 7 6.0)) r)
p5 (polar p0 (* pi (/ 9 6.0)) r)
p6 (polar p0 (* pi (/ 11 6.0)) r)
  )
  (setq os_mode(getvar "osmode"))
  (setvar "osmode" 0)
  ;;画外圆
  (command "circle" p0 r)
  ;;不再使用repeat函数来执行
  (foreach n (list (list p1 p0 p3 "1")
     (list p2 p0 p4 "2")
     (list p3 p0 p5 "3")
     (list p4 p0 p6 "4")
     (list p5 p0 p1 "5")
     (list p6 p0 p2 "6")
      )
    (command "arc" (car n) (cadr n) (caddr n))
    (command "CHANGE" (entlast) "" "PROPERTIES" "C" (nth 3 n) "")
  )
  (setvar "osmode" os_mode)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-6-1 14:30:25 | 显示全部楼层
LISP中如何做到随机?有没有相关函数,没有的话就使用CPU的时钟时间来做一个伪随机数吧。
发表于 2012-6-1 16:32:08 | 显示全部楼层
本帖最后由 xshrimp 于 2012-6-1 20:08 编辑

我来个动态,随机变色的...


源码下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-6-1 19:57:06 | 显示全部楼层
xshrimp 发表于 2012-6-1 16:32
我来个动态,随机变色的...

强悍。。。
发表于 2012-6-1 20:30:42 | 显示全部楼层
实用意义不大
发表于 2012-6-1 22:26:08 | 显示全部楼层
  1. (defun c:drawflower()
  2.   (setq pointcenter(getpoint))
  3.   (setq n 1 oldp pointcenter ss (ssadd))
  4.   (while(and(setq grcode(grread t 12))(= (car grcode) 5))
  5.     (if (<= n 254)(setq n (+ n 1))(setq n 1))
  6.     (if (and (/= oldp pointcenter)(/= oldp (cadr grcode)))
  7.      (command "erase" ss "")
  8.      )
  9.       (entmake (list '(0 . "CIRCLE") (cons 10 pointcenter)
  10.                      (cons 40 (setq r(distance pointcenter (cadr grcode))))
  11.                      (cons 62 n)
  12.                      )
  13.                )
  14.        (setq e1 (entlast))
  15.        (ssadd e1 ss)
  16.        (if (> r 0)
  17.         (progn
  18.        (command "arc" (polar pointcenter (/ pi 6) r )pointcenter(polar pointcenter (* 5(/ pi 6)) r))
  19.        (command "arc" (polar pointcenter (/ pi 6) r )pointcenter(polar pointcenter (* 9(/ pi 6)) r))
  20.        (command "arc" (polar pointcenter (* 3(/ pi 6))r)pointcenter(polar pointcenter (* 7(/ pi 6)) r))
  21.        (command "arc" (polar pointcenter (* 3(/ pi 6)) r )pointcenter(polar pointcenter (* 11(/ pi 6)) r))
  22.        (command "arc" (polar pointcenter (* 5(/ pi 6)) r )pointcenter(polar pointcenter (* 9(/ pi 6)) r))
  23.        (command "arc" (polar pointcenter (* 7(/ pi 6)) r )pointcenter(polar pointcenter (* 11(/ pi 6)) r))
  24.         )
  25.        )
  26.        (while(setq e1 (entnext e1))
  27.        (ssadd e1 ss)
  28.        (vla-put-color (vlax-ename->vla-object e1)(if (<= n 205)(setq n (+ n 50))(setq n (- n 32))))
  29.         )
  30.        (setq oldp (cadr grcode))
  31.        )
  32.    (princ)
  33.    )
发表于 2012-6-1 22:28:15 | 显示全部楼层
本帖最后由 yjr111 于 2012-6-1 23:07 编辑

自己的一点思路,等下下载xshrimp的比较一下,看看差距在哪里
下载后看了一下:
1、yjr111的程序编写方法属于初级思路,但思路清晰,没有难点
2、xshrimp的程序专业、考虑周全,不过一般初学者估计不多看几遍是理解不了的
结论:有空继续学习
发表于 2012-8-8 10:09:11 | 显示全部楼层
高手,学习一下啊
发表于 2012-8-8 12:02:43 | 显示全部楼层
yjr111和xshrimp都很好,          代码越少越有技术含量......
发表于 2012-8-8 15:10:56 | 显示全部楼层
实用性不是太大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-19 08:09 , Processed in 0.205403 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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