ケプラーの卵 Kepler's Egg [見て楽しむ三角関数]
Scratchでケプラーの卵を描きます。別名Simple Foliumです。foliumはラテン語で葉っぱだそうです。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
今回は単純な一本の曲線ではなく、大きさを変えながら曲線をたくさん描いています。ムール貝のように見えませんか。
まず変数です。今回はスライダー表示の変数「大きさ」はなく、プログラムで大きさを変化させています。
次に本体です。これまでの曲線では繰り返しは一重でしたが、今回は曲線を50回描くので二重の繰り返しになっています。
角度は0度から180度までで一本の線が完成します。360度まで続けても、同じ軌道上を二回たどるだけです。
次に「初期設定」です。これはプログラムの最初に一度だけ行う処理をまとめています。
次は「準備」です。これは曲線1本ごとに行う処理をまとめています。
この曲線を描くための式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ \begin{aligned}
r&=a\cos^3(\theta) \\
&=a\times\cos(\theta)\times\cos(\theta)\times\cos(\theta)
\end{aligned} \] これは前回のDouble Eggと似ています。Double Eggは\[ r=a\cos^2(\theta) \] つまり二乗で、卵が二つ描かれましたが、3乗にすると卵が一つになってしまいます。不思議ですね。
プログラムにするとこうなります。
最後にXを-180しています。この式をそのまま描画すると描画領域の右側だけに曲線が描かれ、左側は空白になります。これでは、曲線が大きくなった場合に描画領域内に収まらず絵が崩れてしまいます。そのため、Xを左に180ずらしています。
移動はいつも同じです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
今回は単純な一本の曲線ではなく、大きさを変えながら曲線をたくさん描いています。ムール貝のように見えませんか。
まず変数です。今回はスライダー表示の変数「大きさ」はなく、プログラムで大きさを変化させています。
次に本体です。これまでの曲線では繰り返しは一重でしたが、今回は曲線を50回描くので二重の繰り返しになっています。
角度は0度から180度までで一本の線が完成します。360度まで続けても、同じ軌道上を二回たどるだけです。
次に「初期設定」です。これはプログラムの最初に一度だけ行う処理をまとめています。
次は「準備」です。これは曲線1本ごとに行う処理をまとめています。
この曲線を描くための式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ \begin{aligned}
r&=a\cos^3(\theta) \\
&=a\times\cos(\theta)\times\cos(\theta)\times\cos(\theta)
\end{aligned} \] これは前回のDouble Eggと似ています。Double Eggは\[ r=a\cos^2(\theta) \] つまり二乗で、卵が二つ描かれましたが、3乗にすると卵が一つになってしまいます。不思議ですね。
プログラムにするとこうなります。
最後にXを-180しています。この式をそのまま描画すると描画領域の右側だけに曲線が描かれ、左側は空白になります。これでは、曲線が大きくなった場合に描画領域内に収まらず絵が崩れてしまいます。そのため、Xを左に180ずらしています。
移動はいつも同じです。
完成版はこちら。
Double Egg [見て楽しむ三角関数]
ScratchでDouble Eggを描きます。卵を二つ向かい合わせに並べたような曲線です。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。今回はラジアンもありません。
次に本体です。曲線がなめらかになるように0.5度ずつ角度を変えています。0度から360度まで変化させるとこの曲線が描けます。
準備はいつも代わり映えしません。変数を初期化して開始点を計算し、そこに移動しています。
次に計算です。式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[\begin{aligned}
r&=a\cos^2(\theta) \\
&=a\times\cos(\theta)\times\cos(\theta)
\end{aligned} \] 以前にも書いたように、Scratchの関数の引数にはラジアンではなく角度を使います。関数の外にθはありませんので、今回はラジアンの計算は不要です。
移動はいつも通りです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。今回はラジアンもありません。
次に本体です。曲線がなめらかになるように0.5度ずつ角度を変えています。0度から360度まで変化させるとこの曲線が描けます。
準備はいつも代わり映えしません。変数を初期化して開始点を計算し、そこに移動しています。
次に計算です。式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[\begin{aligned}
r&=a\cos^2(\theta) \\
&=a\times\cos(\theta)\times\cos(\theta)
\end{aligned} \] 以前にも書いたように、Scratchの関数の引数にはラジアンではなく角度を使います。関数の外にθはありませんので、今回はラジアンの計算は不要です。
移動はいつも通りです。
完成版はこちら。
ガリレオのらせん Galilean Spiral [見て楽しむ三角関数]
Scratchでガリレオのらせんを描きます。
処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
ガリレオのらせんを描くための式はこうなっています。
\[ r=a\theta^2-b \]
式に出てくるaとbはそのまま変数にします。aは曲線を画面内に収めるための倍率で、今回は2に固定します。bはスライダー形式で画面上に表示しています。スライダーを動かして再描画すると絵が変化します。θは角度です。
本体はいつもと大体同じです。角度は-600度から開始して600度で終了します。この範囲は上の曲線を描けるように選びました。
準備も大体これまでと同じです。
次に計算です。式の中のθはラジアンですので、角度をラジアンに変換してから計算に使っています。
ラジアンと移動はいつも通りです。
完成版はこちら。bを1から180まで順に変化させてアニメにしたものはこちら。
処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
ガリレオのらせんを描くための式はこうなっています。
\[ r=a\theta^2-b \]
式に出てくるaとbはそのまま変数にします。aは曲線を画面内に収めるための倍率で、今回は2に固定します。bはスライダー形式で画面上に表示しています。スライダーを動かして再描画すると絵が変化します。θは角度です。
本体はいつもと大体同じです。角度は-600度から開始して600度で終了します。この範囲は上の曲線を描けるように選びました。
準備も大体これまでと同じです。
次に計算です。式の中のθはラジアンですので、角度をラジアンに変換してから計算に使っています。
ラジアンと移動はいつも通りです。
完成版はこちら。bを1から180まで順に変化させてアニメにしたものはこちら。
Neoid [見て楽しむ三角関数]
ScratchでNeoidを描きます。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず本体です。終了する角度以外はいつもと同じです。
次に準備です。開始の角度を-1125にしました。二つの角度は上の曲線を描くためにいろいろ試したした値で、ほかに意味はありません。
式はこうなっています。
\[ r=a\theta+b \]
rは計算結果の半径(画面中心からの長さ)、aとbは変化しない定数です。上のような絵を描くために、角度θを-1125度〜675度まで変化させます。
次に変数です。今回は定数aとbが式に含まれるのでその変数を作り、スライドにして画面上で変更できるようにします。スライドを動かして再描画すると絵が変化します。
ラジアンと移動はいつも通りです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず本体です。終了する角度以外はいつもと同じです。
次に準備です。開始の角度を-1125にしました。二つの角度は上の曲線を描くためにいろいろ試したした値で、ほかに意味はありません。
式はこうなっています。
\[ r=a\theta+b \]
rは計算結果の半径(画面中心からの長さ)、aとbは変化しない定数です。上のような絵を描くために、角度θを-1125度〜675度まで変化させます。
次に変数です。今回は定数aとbが式に含まれるのでその変数を作り、スライドにして画面上で変更できるようにします。スライドを動かして再描画すると絵が変化します。
ラジアンと移動はいつも通りです。
完成版はこちら。
双曲らせん Hyperbolic Spiral [見て楽しむ三角関数]
Scratchで双曲らせんを描きます。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。今回もラジアンを使います。
今回の式はこうなっています。
\[ r=\frac{a}{\theta} \]
aは定数なので変化せず、角度θを1からだんだん大きくしていきます。分子は固定で分母が大きくなっていくので、計算結果である半径rの値は角度が大きくなるに従ってだんだん小さくなります。
ラジアンはこれまでと同じです。
次に本体です。
今回は角度を1から始めて、X座標とY座標の絶対値がともに1未満になるまで繰り返します。
準備はいつもあまり変わりません。
移動も同じです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。今回もラジアンを使います。
今回の式はこうなっています。
\[ r=\frac{a}{\theta} \]
aは定数なので変化せず、角度θを1からだんだん大きくしていきます。分子は固定で分母が大きくなっていくので、計算結果である半径rの値は角度が大きくなるに従ってだんだん小さくなります。
ラジアンはこれまでと同じです。
次に本体です。
今回は角度を1から始めて、X座標とY座標の絶対値がともに1未満になるまで繰り返します。
準備はいつもあまり変わりません。
移動も同じです。
完成版はこちら。
アルキメデスのらせん Archimedean Spiral [見て楽しむ三角関数]
Scratchでアルキメデスのらせんを描きます。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。前回のガーフィールド曲線と同様で、ここでもラジアンを使います。
次に本体です。今回は特定の角度まで繰り返すのではなく、線が描画領域の端に達するまで繰り返します。
次は準備処理です。特別な処理はありません。
円を除けば、式はこれまでで一番単純です。
\[ r=a\theta \]
aは曲線が見えるように拡大するための倍率で、値は固定で変化しません。θは角度に応じて変化するので、角度が増えるに従って半径も増えると考えれば良さそうです。実際そういう絵になっていますね。
この式のθはラジアンですので、ラジアンを計算するブロックが必要です。
計算はこうなります。
簡単ですね。移動はいつも通りです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。前回のガーフィールド曲線と同様で、ここでもラジアンを使います。
次に本体です。今回は特定の角度まで繰り返すのではなく、線が描画領域の端に達するまで繰り返します。
次は準備処理です。特別な処理はありません。
円を除けば、式はこれまでで一番単純です。
\[ r=a\theta \]
aは曲線が見えるように拡大するための倍率で、値は固定で変化しません。θは角度に応じて変化するので、角度が増えるに従って半径も増えると考えれば良さそうです。実際そういう絵になっていますね。
この式のθはラジアンですので、ラジアンを計算するブロックが必要です。
計算はこうなります。
簡単ですね。移動はいつも通りです。
完成版はこちら。
ガーフィールド曲線 Garfield Curve [見て楽しむ三角関数]
Scratchでガーフィールド曲線を描きます。ガーフィールドは漫画のキャラクターです。
なんとなく似ていますね。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
では本体から。半径の計算に使う角度は0〜360度までです。
変数は次の通りです。「ラジアン」は角度から計算されるラジアンを記憶しておくための変数です。
次に準備です。
式はこうなります。
\[ r=\theta\cos(\theta) \]
ここで注意が必要なのは、二種類のθです。Scratchでは、関数の引数(かっこの中の数)に使う数値は「角度」です。一方、曲線を描くときの数式に出てくるθは普通は「ラジアン」です。Scratchでも関数の引数ではないθはラジアンに変換しなければなりません。ラジアンの計算方法はこれです。
ブロックを作って計算式を定義しています。Scratchのブロックは一般的なプログラミング言語の関数やサブルーチンとは違い値を返せません。ですので計算結果を変数「ラジアン」に格納して、その後の計算処理で使っています。
次に計算処理です。
まずラジアンを計算し、次にラジアンと角度を使って半径を計算しています。その後、X座標とY座標を計算しています。
移動はいつもと同じです。
完成版はこちら。
なんとなく似ていますね。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
では本体から。半径の計算に使う角度は0〜360度までです。
変数は次の通りです。「ラジアン」は角度から計算されるラジアンを記憶しておくための変数です。
次に準備です。
式はこうなります。
\[ r=\theta\cos(\theta) \]
ここで注意が必要なのは、二種類のθです。Scratchでは、関数の引数(かっこの中の数)に使う数値は「角度」です。一方、曲線を描くときの数式に出てくるθは普通は「ラジアン」です。Scratchでも関数の引数ではないθはラジアンに変換しなければなりません。ラジアンの計算方法はこれです。
ブロックを作って計算式を定義しています。Scratchのブロックは一般的なプログラミング言語の関数やサブルーチンとは違い値を返せません。ですので計算結果を変数「ラジアン」に格納して、その後の計算処理で使っています。
次に計算処理です。
まずラジアンを計算し、次にラジアンと角度を使って半径を計算しています。その後、X座標とY座標を計算しています。
移動はいつもと同じです。
完成版はこちら。
デューラーの葉形曲線 Dürer Folium [見て楽しむ三角関数]
Scratchでデューラーの葉形曲線を描きます。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。特に説明が必要な変数はありません。もしわからなければ、初回の解説を参照してください。
次に本体です。角度は0度〜720度まで変化させると絵が完成します。
次に準備です。これもいつもと変わりありません。
次に計算です。
式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ r=a\sin\left(\frac{\theta}{2}\right) \]
移動はいつもと同じです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。特に説明が必要な変数はありません。もしわからなければ、初回の解説を参照してください。
次に本体です。角度は0度〜720度まで変化させると絵が完成します。
次に準備です。これもいつもと変わりありません。
次に計算です。
式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ r=a\sin\left(\frac{\theta}{2}\right) \]
移動はいつもと同じです。
完成版はこちら。
スピログラフ Spirograph [見て楽しむ三角関数]
Scratchでスピログラフを描きます。スピログラフとはこのような定規型のものです。
By Alexei Kouprianov, CC 表示 2.5, Link
この定規を使うと、次のような絵が描けます。
これをScratch上で再現します。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。
スピログラフは大きな円の中を小さな円が回転して軌跡を描くので、それぞれの円に対応する「半径大」と「半径小」を使います。「幅」は小さな円の中心から描画点までの距離です。この値を大きくするとドーナツ本体が太くなり、値を小さくするとドーナツが細くなります。
次に本体です。
今回は曲線がなめらかになるように角度を0.5ずつ変化させます。また、角度が360度になったら終了するのではなく、永遠に繰り返します。半径の値によって終了する角度が異なるからです。
次に準備です。
特に変わった処理はありません。
次に計算です。X, Yともに長いのでどちらも2行に分けました。
式はWikipediaにあります。
\[x=(R-r)\cos(\theta)+p\cos\left(\frac{R-r}{r}\theta\right) \\
y=(R-r)\sin(\theta)-p\sin\left(\frac{R-r}{r}\theta\right) \]Rは変数「半径大」、rは変数「半径小」です。また、pは変数「幅」に対応します。θは角度です。
移動はいつもと同じです。
完成版はこちら。描画に時間がかかるので、ターボモードがおすすめです。
By Alexei Kouprianov, CC 表示 2.5, Link
この定規を使うと、次のような絵が描けます。
これをScratch上で再現します。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。
スピログラフは大きな円の中を小さな円が回転して軌跡を描くので、それぞれの円に対応する「半径大」と「半径小」を使います。「幅」は小さな円の中心から描画点までの距離です。この値を大きくするとドーナツ本体が太くなり、値を小さくするとドーナツが細くなります。
次に本体です。
今回は曲線がなめらかになるように角度を0.5ずつ変化させます。また、角度が360度になったら終了するのではなく、永遠に繰り返します。半径の値によって終了する角度が異なるからです。
次に準備です。
特に変わった処理はありません。
次に計算です。X, Yともに長いのでどちらも2行に分けました。
式はWikipediaにあります。
\[x=(R-r)\cos(\theta)+p\cos\left(\frac{R-r}{r}\theta\right) \\
y=(R-r)\sin(\theta)-p\sin\left(\frac{R-r}{r}\theta\right) \]Rは変数「半径大」、rは変数「半径小」です。また、pは変数「幅」に対応します。θは角度です。
移動はいつもと同じです。
完成版はこちら。描画に時間がかかるので、ターボモードがおすすめです。
魚曲線 Fish Curve [見て楽しむ三角関数]
Scratchで魚のような曲線を描きます。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。
今回は「半径」は使わず、XとYを直接計算します。
本体はいつもと同じです。
次に準備です。
代わり映えしません。
次は計算です。
式はWolfram MathWorldにあります。参考のために一応式も書いておきますが、覚えたり理解したりする必要はありません。
\[ x=a\cos(\theta) - \frac{a\sin^2(\theta)}{\sqrt2} \\
y=a\cos(\theta)\sin(\theta) \\
0\le\theta\le360 \]
aは大きさ(倍率)、θはいつも通り角度です。この曲線では0から360まで変化します。
移動はいつも通りです。
完成版はこちら。
曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。
まず変数です。
今回は「半径」は使わず、XとYを直接計算します。
本体はいつもと同じです。
次に準備です。
代わり映えしません。
次は計算です。
式はWolfram MathWorldにあります。参考のために一応式も書いておきますが、覚えたり理解したりする必要はありません。
\[ x=a\cos(\theta) - \frac{a\sin^2(\theta)}{\sqrt2} \\
y=a\cos(\theta)\sin(\theta) \\
0\le\theta\le360 \]
aは大きさ(倍率)、θはいつも通り角度です。この曲線では0から360まで変化します。
移動はいつも通りです。
完成版はこちら。