SSブログ

ダンベル曲線 (1) Dumbbell Curve [見て楽しむ三角関数]

Scratchダンベル曲線を描きます。8曲線の第5回です。ダンベル曲線には二種類の式があり、今回は一つ目です。sin, cosを使います。

[ダンベル曲線]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

最初に変数です。X, Yは曲線を描くときの座標、大きさと倍率は曲線の拡大用、角度は座標の計算式に使います。今回の式では半径は使いません。

[変数]

次に本体です。角度を0度から360度まで変化させて計算、移動するとこの曲線が描けます。

[本体]

次に準備です。プログラムを実行すると最初に一回呼び出されます。変数を初期設定、開始点を計算して移動します。

[準備]

式はこうなっています。aは倍率(大きさ)、θは角度です。
\[ x=a\cos(\theta) \\
y=a\cos^2(\theta)\sin(\theta) \] この式をプログラムにすると次のようになります。

[計算]

移動はいつも通りです。

[移動]

完成版はこちら

ところで、参照先のWolfrum MathWorldにはsin, cosを使った式が書かれていません。何かを参考にプログラムを書いた気がするので、もし上のsin, cosを使った式が書かれているページをご存知の方はご一報ください。あるいは適当に操作していてできた式かもしれませんが。
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

ダイポール曲線 Dipole Curve [見て楽しむ三角関数]

Scratchダイポール曲線(Dipole Curve)を描きます。8曲線の第4回です。

[Dipole Curve]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

さて、いきなりですが、今回の式はこのようになっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ r^2=a^2\cos(\theta) \] 左辺が二乗になっているので、いつものr=...の形式に変換します。
\[ r=\pm\sqrt{a^2\cos(\theta)} \] 「±」は正の式と負の式があることを示しています。ですので、一見一本の繋がった曲線に見えますが、実は二本の独立した曲線です。このため二つのスプライトを使い正の曲線と負の曲線を同時に描画します。違う色で二本の曲線を描画するとより明確になります。

[Dipole Curve 2]

このような理由から、プログラムの開始処理がいつもとは少し違います。最初にステージ(下の図の青枠で囲った部分)のスクリプトを作成します。

[スプライト]

ステージでは以下のように緑色の旗をクリックした時に色を設定するとともに「開始」イベントを生成します。

[開始]

二つの黄色のスプライトは「開始」イベントを受け取ったら描画を開始します。

次に変数です。今回は上で説明した式のとおり半径を使います。色と大きさは二つの描画用スプライトで共有するため「すべてのスプライト用」の変数としています。大きさはスライド表示で値を変更できるようにします。その他の変数は二つのスプライトで独立した値を持つ必要があるので、個々のスプライトで専用の変数をもたせます。

[変数]

次に本体です。ステージのプログラムから「開始」イベントを受け取ると、各スプライトの処理が始まります。角度を0度から360度まで変化させるとこの曲線が描画できます。二つのスプライトで同じプログラムを記述します。

[本体]

次に準備です。これも二つのスプライトで同じになります。変数を初期化、開始点を計算して移動、ペンの色を設定しています。

[準備]

最初に説明した式をScratchのプログラムにすると以下のようになります。まず正の曲線の式です。

[計算]

次に負の曲線の式です。上の式とほぼ同じですが、半径の計算結果に-1を掛けて符号を反転させています。これにより描画領域の左側に曲線が描かれます。

[計算2]

移動はいつも通りです。

[移動]

完成版はこちら
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

ネフロイド Nephroid [見て楽しむ三角関数]

Scratchネフロイドを描きます。8曲線第3回です。今回の曲線は中心で交差しないので、厳密には前回前々回のような8ではありません。

[ネフロイド]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

最初に変数です。今回は半径は使わず、XとYを直接計算します。cos角度とsin角度は、なんども使う三角関数の計算結果を一時的に保存しておくための変数です。

[変数]

次に本体です。今回は二重の繰り返しで、倍率と色を変えて複数の曲線を描きます。

[本体]

次に準備です。プログラムを実行したら最初に一度だけ呼び出されます。

[準備]

次は「原点に移動」です。一つの曲線を描くときに、描き始める点を計算してそこに移動しています。これがないと、複数の曲線の間をつなぐ不要な線が描かれてしまいます。

[原点に移動]

式はこうなっています。aは倍率(大きさ)、θは角度です。式から曲線が想像できるわけではありません。
\[ x= 6a\cos(\theta)-4a\cos^3(\theta) \\
y=4a\sin^3(\theta) \] X座標の計算式の中の \[\cos^3(\theta) \] は \[ \cos(\theta)\times\cos(\theta)\times\cos(\theta) \] です。Y座標の計算式の\[\sin^3(\theta) \] も同様で、sin(θ)を三回掛けるという意味です。このXとYの計算式をScratchのプログラムにすると次のようになります。

[計算]

移動はいつも通りです。

[移動]

完成版はこちら
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

8曲線 Eight Curve [見て楽しむ三角関数]

Scratch8曲線を描きます。別名はGeronoのレムニスケートです。

[8曲線]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

最初に変数です。

[変数]

今回は半径は使わず、三角関数を使ってX座標とY座標を直接計算します。
倍率は絵の大きさです。三角関数の値は0から1の間に収まるので、計算した値をそのまま座標に使って描画すると画面の中心に点が描かれて終わってしまいます。そのため、倍率を掛けて大きな絵にします。
大きさは倍率と同じですが、値を変更できるようにスライダー表示にしています。実行中にこのスライダーを動かすと綺麗な曲線にならないので、プログラムを実行する際に「大きさ」の値を「倍率」に入れて固定し、実行中の計算に使います。

次に本体です。角度を0度から360度まで変化させて計算、移動するとこの曲線が描画できます。

[本体]

次に準備です。開始点を計算して移動しています。また変数を初期化しています。

[準備]

式はこうなっています。aは倍率(大きさ)、θは角度です。
\[ x=a\sin(\theta)\\
y= a\sin(\theta)\cos(\theta) \] この式をScratchのプログラムにするとこうなります。

[計算]

移動はいつも通りです。

[移動]

完成版はこちら
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

レムニスケート Lemniscate [見て楽しむ三角関数]

Scratchレムニスケートを描きます。8を横に倒したような曲線は色々ありますので、続けて紹介する予定です。

[レムニスケート]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

最初に変数です。「高さ」はその名の通り、曲線をY座標方向に拡大するための変数です。その他はいつもと同様です。

[変数]

次に本体です。今回はペンの形をしたスプライトを表示して、ペンで曲線を描いているような効果を出しています。本体の最後の「隠す」は曲線が完成した後でペンを隠すための命令です。

[本体]

次に準備です。いつもと同じで、変数を初期化、開始点を計算して移動しています。最後の「表示する」でペンのスプライトを表示しています。

[準備]

描画中のペンはこのような表示になっています。

[レムニスケート描画中]


式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。
\[ r^2=2a^2\cos(2\theta) \] =の左側の半径が2乗されているのがいつもと違う点です。両辺の平方根を計算するといつものようにr=...の形式になります。
\[ r=\sqrt{2a^2\cos(2\theta)} \] プログラムではこちらを使って半径を計算し、さらに半径と角度からX座標とY座標を計算しています。

[計算]

移動はいつも通りです。

[移動]

完成版はこちら
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

フェルマーのらせん Fermat's spiral [見て楽しむ三角関数]

Scratchフェルマーのらせんを描きます。

[フェルマーのらせん]

曲線を描く処理の詳細は初回で説明していますので、そちらを参照してみてください。違う曲線ですが流れは同じです。

今回の式はこうなっています。rは半径、aは倍率(大きさ)、θは角度です。前回の放物らせんに似ています。
\[ r=\pm a\sqrt{\theta} \] 一見単純ですが、=の右側に±の記号があるので、プラスの式とマイナスの式の二つの計算が必要になります。このため、スプライトを二つ作り、画面中心から正(プラス)回転と逆(マイナス)回転で同時に二本の曲線を描きます。上の曲線で色が二種類あるのはこのためです。

正回転スプライト

正回転と逆回転の違いは「計算」ブロックの式だけで、逆回転では-1を掛けます。その他は共通です。

ではプログラムを見ていきましょう。最初に変数です。

[変数]

今回はスプライトを二つ作りますので、変数には注意が必要です。Scratchには「すべてのスプライト用」の変数と「このスプライトのみ」の2二種類の変数が存在します。XやYはそれぞれのスプライトの座標を保持するための変数ですので、正回転スプライトと逆回転スプライトで別々にXとYを持っておく必要があります。角度や半径、倍率も同様で、すべてのスプライト用変数にすると複数のスプライトから同時に更新され、正しい値にならない可能性があります。したがってこれらも各スプライト用に持っておく必要があります。このため、「大きさ」以外は「このスプライトのみ」の変数にしています。

次に本体です。前回と同様、今回も描画範囲の端に到達したら終了します。繰り返しの水色の部分です。

[本体]

次は準備です。いつもと同じで、開始点を計算して移動しています。

[準備]

正回転の計算はこうなります。倍率と角度から半径を計算し、半径からX座標とY座標を求めます。

[正回転計算]

逆回転の計算はこうなります。正回転の式に-1を掛けて、符号を反転しています。

[逆回転計算]

移動はいつも通りです。

[移動]

完成版はこちら
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。