直線上に配置



←前のページ  次のページ→


4.スクリプトの説明〜”三角関数計算”

次は、1番難しい”三角関数計算”のスクリプトです。今回はあとで図を載せます。

前にも言いましたがこのスクリプトだけSmalltalkです。実は難しいので自分一人ではやっていません。
さて、説明に入っていきますが、そもそも三角関数とは何なのか。それは、次のような図で表すことができます。



※x、yというのはそれぞれx軸、y軸のことです。

そして、図の円の半径は1で、いつでも+です。でも、図にある sinθcosθという値は、
線のθ値によって+か-かが変わります。(下の表を参考にしてください)

線のθ値が 0°〜 90°のとき sinθは+で、cosθも+
90°〜 180°のとき sinθは+で、cosθは-
180°〜 270°のとき sinθは-で、cosθも-
270°〜 0°のとき sinθは-で、cosθは+

これをもとにして、実際にSqueakでの座標計算に当てはめていくと、次の図のようになります。



※x、yというのは前の図と同じくx軸、y軸のことで、x1、x2、y1、y2というのは座標のことを表しています。
そして、幹は前の図の半径の線分に当てはまります。

x1とy1の座標はわかっています。(幹のx座標とy座標のことなので)そして次に、x2とy2の座標を求めます。
その求め方は、幹の長さを l  (エル)として次のような式で求めることができます。

x2を求める x2 - x1 = l cosθ より x2 = x1 + l cosθ
y2を求める y2 - y1 = l sinθ より y2 = y1 + l sinθ

という式です。この式を使うと、幹がどんな方向を向いていても同じ式で求めることができます。
あとは、求めたx2、y2の値に1/3や2/3をかけることによって、次の枝の生える位置が求められます。
(”枝一本目”では1/3、”枝二本目”では2/3、”枝三本目”ではそのままの値でスクリプトを作っています)

Smalltalkでは次のように書いています。



わかりやすく書くと、

sinの値 = 向きの値 × π(円周率) ÷ 180
cosの値 = 向きの値 × π ÷ 180

となります。ここで、”π÷180”を掛けているのは角度をラジアンに変換するためです。
Smalltalkでは向きの値は”getHeadingTheta”、πは”Float pi”と表します。
どうやって調べたかというと、例えば次のようにします。
まず図のようにタイルスクリプトで”向きの値”のタイルを入れたスクリプトを作ります。
作ったら、タイルスクリプトとSmalltalkスクリプトの切り替えボタンを押します。



すると次の図のようになります。



これは次のように読み替えることができます。
self(自分の) setHeading:(向きは) self(自分の) getHeadingTheta(向きの値)
という感じです。


P.S: これを作った後に”Float pi” について調べていると、”degreeCos””degreeSin”というメソッドがありました。
これを使えば”π÷180”を掛ける必要がなくなります。もうちょっと楽にできたかも。(^^;)


次のページでは、”枝を半分にする”スクリプトの説明をします。


←前のページ  次のページ→


ページ飛び機能
1 2 3 4 5 6 7 8


トップ アイコン トップページへ戻る
Squeak の部屋へ戻る


直線上に配置