lead009 发表于 2010-11-22 18:47:00

請教一個數值累加的計算問題

<p></p>
<p>&nbsp;</p>
<p>這一段程式的運作如下。</p>
<p>點選兩點p1 p2,後畫出金字塔圓。</p>
<p>&nbsp;</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>&nbsp;</p>
<p><font color="#800000">&nbsp;</p></font>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<font face="Verdana">(defun c:lsp_16()<br/>&nbsp;&nbsp; (setvar "cmdecho" 0)<br/>&nbsp;&nbsp; (setq pt1 (getpoint "\n起點: "))<br/>&nbsp;&nbsp; (setq pt2 (getpoint pt1 "\n終點: "))<br/>&nbsp;&nbsp; (setq nn (getint "\n堆疊數&lt;10&gt;: "))<br/>&nbsp;&nbsp; (if (null nn) (setq nn 10))<br/>&nbsp;&nbsp; (setq dd (distance pt1 pt2))<br/>&nbsp;&nbsp; (setq ang (angle pt1 pt2))<br/>&nbsp;&nbsp; (setq rr (/ (/ dd (1- nn)) 2))<br/>&nbsp;&nbsp; (setq nn2 nn)<br/>&nbsp;&nbsp; (repeat nn <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq bas pt1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat nn2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "circle" bas rr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq bas (polar bas ang <font color="#800000">(* rr 2)))<br/></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq nn2 (1- nn2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt1 (polar pt1 (+ ang (/ (* 60 pi) 180)) <font color="#800000">(* rr 2)))<br/></font>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (prin1)<br/>)</font></p>

Andyhon 发表于 2010-11-22 19:39:00


這樣改動提供您來比對理解

.....
;; (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))
   )

....



lead009 发表于 2010-11-22 20:02:00

<p>喔喔,這樣我懂了</p>
<p>我把它搞錯了,是每一個迴圈以base為基點,增加一個直徑的長</p>
<p>&nbsp;</p>
<p>謝謝你的幫助,我現在明白了</p>
页: [1]
查看完整版本: 請教一個數值累加的計算問題