找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1967|回复: 33

[推荐]:AutoCAD, VisualLISP与分形几何学

[复制链接]

已领礼包: 23个

财富等级: 恭喜发财

发表于 2002-4-30 02:32:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
这是abbs上今天的一篇关于AutoCAD, VisualLISP与分形几何学的好贴,推荐大家看看...

http://www.abbs.com.cn/cgi-bin/b ... mp;age=30&bpg=1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 23个

财富等级: 恭喜发财

 楼主| 发表于 2002-4-30 02:33:29 | 显示全部楼层

第一个函数我修改了一下...


  1. (defun c:cc (/ cshape pt1 pt2 ang oldvar)

  2.   (defun cshape        (p1 p2 ang)
  3.     (if        (> (distance p1 p2) 10.0)
  4.       (progn
  5.         (setq p3 (polar        p1
  6.                         (+ ang (angle p1 p2))
  7.                         (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
  8.                  )
  9.         )
  10.         (command "pline" p1 p3 p2 "")
  11.         (cshape p1 p3 ang)
  12.         (setq p3 (polar        p1
  13.                         (+ ang (angle p1 p2))
  14.                         (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
  15.                  )
  16.         )
  17.         (cshape p3 p2 ang)
  18.       )
  19.     )                                        ;end if
  20.   )                                        ;end defun cshape

  21.   ;;main
  22.   (setq pt1 (getpoint "\n first point"))
  23.   (setq
  24.     pt2        (getpoint pt1 "\n second point(最终收敛值为10,请注意长度):")
  25.   )
  26.   (setq ang (getangle "\n angle(not equal 60.0 degree: "))
  27.   (setq oldvar (getvar "OSMODE"))
  28.   (setvar "OSMODE" 0)
  29.   (cshape pt1 pt2 ang)
  30.   (setvar "OSMODE" oldvar)
  31.   (princ)
  32. )                                        ;end defun c:cc
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 03:31:27 | 显示全部楼层
我觉得lsp的递归有问题,按道理下面的程序行不应该在子程序里出现两次 :
        (setq p3 (polar        p1
                        (+ ang (angle p1 p2))
                        (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
                 )
        )

我觉得它的函数返回和其他语言不太一样,如果去掉了这段,递归时有一个p3它会找错地方,但是p2能够回到原位,也许把p3也作为该子程序的参数就不会出现这个问题了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-30 03:37:06 | 显示全部楼层
最初由 liver 发布
[B]我觉得lsp的递归有问题,按道理下面的程序行不应该在子程序里出现两次 :
        (setq p3 (polar        p1
                        (+ ang (angle p1 p2))
                        (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
                 )
        )

我觉得它的函数返回和其他... [/B]


欢迎你,LIVER,我给你发悄悄话了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 04:05:23 | 显示全部楼层
关于分形与混沌
http://www.phil.pku.edu.cn/perso ... talart/html/105.htm

M集很漂亮。我高中时就曾想用程序绘制出来。但是当时搞不到电脑用,呵呵.....
谁有源程序?不想是什么语言的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 04:06:59 | 显示全部楼层

关于M集与JULIA集

“次方数”取2时,由复函数 f(C)=C^2+C0 迭代得序列:0, C, C^2 + C, C^4 + 2*C^3 + C^2 + C, C^8 + 4*C^7 + 6*C^6 + 6*C^5 + 5*C^4 + 2*C^3 + C^2+C , ......集合区域是其序列维持有界的所有C组成的,研究这种结构本身是数学中称作复杂动力系统的学科。当“次方数”取N时,迭代的复函数为 f(C) = C^N + C0 。
Julia 集:对复平面上的一个二次映射迭代,即f(z) = z*z + C,对平面上的一点 z=z0 进行迭代,经足够多次迭代后函数值不扩散,这类z0点组成的集合为Julia集,对每一个特定的C都有一个相应Julia集,记为J(C) , C为复数;或 J(a,b) , a、b为C 的实部和虚部。
Mandelbrot集: M集是使Julia集为连通的参数C的集合。它的另一个等价的定义为对每一个C,让z0=0代入迭代式:f(z) = z*z + C,经足够多次迭代后函数值不扩散,这样的C所组成的集合为M集。1980年当 B. B. Mandelbrot第一次画出它的图形以来,M集就被认为是数学上最为复杂的集合之一,又是如此的美丽,它吸引了大批的科学家和爱好者。M集又被称为“数学恐龙”,它已成为混沌、分形最为重要的标志之一。
M集与J集的简单高次迭代:n次迭代式为f(z)=z^n+C (“x^y”表示x的y次方)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 04:09:38 | 显示全部楼层
漂亮的M集(局部)

  1. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber1" height="800">
  2.   <tr>
  3.     <td width="100%" height="800">
  4.       <iframe name="I1" width="100%" height="100%" src="http://album.chinaren.com/a_photo.php3?aid=910126&pid=20834&ext=gif&totalnum=41&classname=HouSisong的像册&classmaster=housisong&CHINARENKEY=">
  5. 浏览器不支持嵌入式框架或配置为不显示嵌入式框架
  6.       </iframe>
  7.     </td>
  8.   </tr>
  9. </table>
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 04:12:27 | 显示全部楼层
http://album.chinaren.com/album.php3?aname=user_housisong

  1. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber1" height="498">
  2.   <tr>
  3.     <td width="100%" height="489">
  4.       <iframe name="I1" width="100%" height="100%" src="http://album.chinaren.com/album.php3?aname=user_housisong">
  5. 浏览器不支持嵌入式框架或配置为不显示嵌入式框架
  6.       </iframe>
  7.     </td>
  8.   </tr>
  9. </table>
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 04:44:10 | 显示全部楼层

推荐一个地址

http://www.bp.ntu.edu.tw/WebUsers/ftlin/course/CAAD/cad.htm
我是看了这个想起来做分形的
不过lsp的递归如果老是返回不了原先的值就比较麻烦了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-30 04:49:26 | 显示全部楼层

Re: 推荐一个地址

最初由 liver 发布
[B]http://www.bp.ntu.edu.tw/WebUsers/ftlin/course/CAAD/cad.htm
我是看了这个想起来做分形的
不过lsp的递归如果老是返回不了原先的值就比较麻烦了 [/B]


LIVER,说说,“lsp的递归如果老是返回不了原先的值”是什么意思? 最好举个例子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 05:11:59 | 显示全部楼层

yi?我在哪里贴图?

你跟踪一下这个程序:
在(cshape p1 p3 ang)完成后应该进行(cshape p3 p2 ang),但是此时的p3程序选取的是最后出现的p3,而不是递归完成後应该回到的p3,而p2能正确返回

  1. [FONT=courier new]
  2. (defun c:cc (/ cshape pt1 pt2 ang oldvar)

  3.   (defun cshape        (p1 p2 ang)
  4.     (if        (> (distance p1 p2) 10.0)
  5.       (progn
  6.         (setq p3 (polar        p1
  7.                         (+ ang (angle p1 p2))
  8.                         (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
  9.                  )
  10.         )
  11.         (command "pline" p1 p3 p2 "")
  12.         (cshape p1 p3 ang)
  13.         (cshape p3 p2 ang)
  14.       )
  15.     )                                        ;end if
  16.   )                                        ;end defun cshape

  17.   ;;main
  18.   (setq pt1 (getpoint "\n first point"))
  19.   (setq
  20.     pt2        (getpoint pt1 "\n second point(最终收敛值为10,请注意长度):")
  21.   )
  22.   (setq ang (getangle "\n angle(not equal 60.0 degree: "))
  23.   (setq oldvar (getvar "OSMODE"))
  24.   (setvar "OSMODE" 0)
  25.   (cshape pt1 pt2 ang)
  26.   (setvar "OSMODE" oldvar)
  27.   (princ)
  28. )                                        ;end defun c:cc

  29. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 05:16:48 | 显示全部楼层

图上红色虚线是第四次计算应该出现的正确答案

蓝色是错误的点,由于p3位置选取错误造成
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 05:21:08 | 显示全部楼层

so..

所以我在(cshape p1 p3 ang) 和(cshape p3 p2 ang)之间增加了这一段,
再计算一次p3,以便让(cshape p3 p2 ang)能够有正确的p3值作为参数
但是好像别的语言写的递归不需要这样

        (setq p3 (polar        p1
                        (+ ang (angle p1 p2))
                        (* (distance p1 p2) (abs (/ 0.5 (cos ang))))
                 )
        )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-30 07:56:44 | 显示全部楼层

Mandelbrot set 在autocad里画不出来

大概做到226级就停止了,但是已经能看出收敛的范围
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-30 09:20:13 | 显示全部楼层

Re: yi?我在哪里贴图?

最初由 liver 发布
[B]你跟踪一下这个程序:
在(cshape p1 p3 ang)完成后应该进行(cshape p3 p2 ang),但是此时的p3程序选取的是最后出现的p3,而不是递归完成後应该回到的p3,而p2能正确返回
(defun c:cc (/ c... [/B]


liver, 你在函数(defun cshape ...这个最后,加上个点返回,
如:
  1. [FONT=courier new]
  2. (defun cshape (p1 p2 ang)
  3.    (if ....
  4.    )
  5.    p3
  6. )
  7. [/FONT]


然后修改函数调用为 (setq p3 (cshape p1 p3 ang)) 试试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 12:56 , Processed in 0.349192 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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