crazymiss 发表于 2013-9-4 11:50:12

求自转公转LISP

A图形围绕点1公转,同时自身围绕点2自转(点2在A图形上),两个转动角度要求可以自己输入。A图形可以框选,并且保留A图形的轨迹。

crazymiss 发表于 2013-9-5 19:11:58

没有大神理我??
大概就是复制一个图元到指定点并且让复制后的图元旋转指定角度。

ZZXXQQ 发表于 2013-9-5 23:48:04

口说无凭,给张图样。

crazymiss 发表于 2013-9-6 00:04:42

如图,A围绕P2点做圆周运动,自身有围绕P1点自转。假定A围绕P2点每5度复制一个,那么A点自身就围绕P2点旋转10度,B相对于A旋转10度,C相对于B旋转10.

crazymiss 发表于 2013-9-6 00:05:57

ZZXXQQ 发表于 2013-9-5 23:48 static/image/common/back.gif
口说无凭,给张图样。

大神,图贴上来了,您看看!

ZZXXQQ 发表于 2013-9-6 07:49:53

本帖最后由 ZZXXQQ 于 2013-9-8 09:44 编辑

程序调好了。试试看
;卫星式阵列 明经 ZZXXQQ 2013.9.8
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (princ "\n选择卫星图元: ")
          (setq ss (ssget))
          (setq pc (getpoint "\n选择自转中心点: "))
          (setq pc1 (getpoint "\n选择公转中心点: "))
          (setq r (getdist "\n输入公转半径: "))
          (setq ang (getangle "\n输入起始角度: "))
          (setq n (getint "\n输入阵列数量: "))
          (setq dlta (getreal "\n输入旋转步长(角度): "))) (progn
(setq start ang)
(setq dlta (/ (* dlta pi) 180))
(setq i 0)
(repeat n
   (setq an1 (+ start (* dlta i)))
   (setq pt1 (polar pc1 an1 r))
   (setq an2 (/ (* dlta i 2 180) pi))
   (setq ss1 (ssadd) s1 (entlast))
   (command ".COPY" ss "" pc pt1)
   (while (setq s1 (entnext s1)) (ssadd s1 ss1))
   (command ".ROTATE" ss1 "" pt1 an2)
   (setq i (1+ i))
)
))
(setvar "CMDECHO" 1)
(princ)
)

crazymiss 发表于 2013-9-6 08:27:12

试过了,不行呀。上图,右边那个图是用程序做的,P1为自转中心。P2为公转中心。公转半径250,起始角度0度,阵列个数12,步长60.我不理解步长是什么。我这个步长是按阵列12个每个之间角度就是30度,自转就是60度。
我QQ314230059.可以QQ联系我。

crazymiss 发表于 2013-9-6 08:28:00

ZZXXQQ 发表于 2013-9-6 07:49 static/image/common/back.gif
程序未调试。试试看


试过了,不行。过程我贴上来了,您再给看看!~

vormittag 发表于 2013-9-6 10:07:45

可以用转换矩阵来解。

crazymiss 发表于 2013-9-6 11:22:49

vormittag 发表于 2013-9-6 10:07 static/image/common/back.gif
可以用转换矩阵来解。

求详细解答。谢谢
页: [1] 2
查看完整版本: 求自转公转LISP