Diamond
Pattern
to line :x1 :y1 :x2 :y2
penup
setxy sentence :x1 :y1
pendown
setxy sentence :x2 :y2
end
to DiamondPattern :radius [:elements 20] 1
(local
"po.x
"po.y
"rpos
"addrpos
)
make "po.x array :elements
make "po.y array :elements
make "rpos 0
make "addrpos (/ 360 :elements)
for "i 0 (- :elements 1) [
aset :po.x :i (* :radius cos :rpos)
aset :po.y :i (* :radius sin :rpos)
make "rpos (+ :rpos :addrpos)
]
for "i 0 (- :elements 1) [
for "j 0 (- :elements 1) [
line (aget :po.x :i) (aget :po.y :i) (aget :po.x :j) (aget :po.y :j)
]
]
end
DiamondPattern 100
|
(DiamondPattern 100 8)
|
|
|
配列を使った簡単なサンプルです。
最初の for ループで、半径 radius
で求められた座標を計算して、配列に入れています。
円を多角形で近似する方法と、同一ですね。
そして、次の二重 for
ループで座標同士を線で繋いでいます。
ひとつの座標から、他の座標の全てにと言う事ですね。
line (aget :po.x :i) (aget :po.y :i) (aget :po.x :j)
(aget :po.y :j)
この部分の、括弧は特に必要ではありませんがプログラムの見やすさを考えて、あえて括弧を付けています。
他言語が、配列要素自体を記述すれば参照できるのに対してLogo言語は、配列操作用の手続きが有ります。
ちょっと面倒くさいですね。:-(
aset が、配列要素への代入。aget
が、配列要素の取出しです。
|