這一段程式的運作如下。
點選兩點p1 p2,後畫出金字塔圓。
這裡頭有一段數值的"累加"計算,讓小弟摸不透
(setq bas (polar bas ang (* rr 2)))
bas是在定點畫圓。所以進入了repeat迴圈中,每轉一圈便累加一個rr值,依此畫出n個相切圓。
但是此處R值定義為(* rr 2 ),即每跑一迴圈便x2,r值不成了等比級數 2 4 8 16 32了嗎?
又如何能畫出相切圓呢?
(此段程式為課本範例,可正確畫出圖形)
(defun c:lsp_16() (setvar "cmdecho" 0) (setq pt1 (getpoint "\n起點: ")) (setq pt2 (getpoint pt1 "\n終點: ")) (setq nn (getint "\n堆疊數<10>: ")) (if (null nn) (setq nn 10)) (setq dd (distance pt1 pt2)) (setq ang (angle pt1 pt2)) (setq rr (/ (/ dd (1- nn)) 2)) (setq nn2 nn) (repeat nn (setq bas pt1) (repeat nn2 (command "circle" bas rr) (setq bas (polar bas ang (* rr 2))) ) (setq nn2 (1- nn2)) (setq pt1 (polar pt1 (+ ang (/ (* 60 pi) 180)) (* rr 2))) ) (prin1) ) |