請教一個數值累加的計算問題
<p></p><p> </p>
<p>這一段程式的運作如下。</p>
<p>點選兩點p1 p2,後畫出金字塔圓。</p>
<p> </p>
<p>這裡頭有一段數值的"累加"計算,讓小弟摸不透</p>
<p><font color="#808080">(setq bas (polar bas ang </font><font color="#800000">(* rr 2)))<br/></font></p>
<p><font color="#800000"><font color="#000000">bas是在定點畫圓。所以進入了repeat迴圈中,每轉一圈便累加一個rr值,依此畫出n個相切圓。</font></font></p>
<p><font color="#000000">但是此處R值定義為(* rr 2 ),即每跑一迴圈便x2,r值不成了等比級數 2 4 8 16 32了嗎?</font></p>
<p>又如何能畫出相切圓呢?</p>
<p><font color="#808080">(此段程式為課本範例,可正確畫出圖形)</font></p>
<p><font color="#800000"><font color="#000000"></font></font> </p>
<p><font color="#800000"> </p></font>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> <font face="Verdana">(defun c:lsp_16()<br/> (setvar "cmdecho" 0)<br/> (setq pt1 (getpoint "\n起點: "))<br/> (setq pt2 (getpoint pt1 "\n終點: "))<br/> (setq nn (getint "\n堆疊數<10>: "))<br/> (if (null nn) (setq nn 10))<br/> (setq dd (distance pt1 pt2))<br/> (setq ang (angle pt1 pt2))<br/> (setq rr (/ (/ dd (1- nn)) 2))<br/> (setq nn2 nn)<br/> (repeat nn <br/> (setq bas pt1)<br/> (repeat nn2<br/> (command "circle" bas rr)<br/> (setq bas (polar bas ang <font color="#800000">(* rr 2)))<br/></font> )<br/> (setq nn2 (1- nn2))<br/> (setq pt1 (polar pt1 (+ ang (/ (* 60 pi) 180)) <font color="#800000">(* rr 2)))<br/></font> )<br/> (prin1)<br/>)</font></p>
這樣改動提供您來比對理解
.....
;; (setq rr (/ (/ dd (1- nn)) 2))
(setq Dia (/ dd (1- nn))
rr (/ Dia 2)
)
(setq nn2 nn)
(repeat nn
(setq bas pt1)
(repeat nn2
(command "circle" bas rr)
(setq bas (polar bas ang Dia))
)
(setq nn2 (1- nn2))
(setq pt1 (polar pt1 (+ ang (/ (* 60 pi) 180)) Dia))
)
....
<p>喔喔,這樣我懂了</p>
<p>我把它搞錯了,是每一個迴圈以base為基點,增加一個直徑的長</p>
<p> </p>
<p>謝謝你的幫助,我現在明白了</p>
页:
[1]