SSブログ

Squircle [見て楽しむ三角関数]

ScratchSquircleを描きます。square+circleの造語で、角が丸い四角です。

[Squircle]

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

最初に変数です。X, Yは曲線を描くための座標、X', Y'はX, Yを計算するときに一時的に値を保持しておくための変数、sgnは独自に定義するsgn関数の結果を保持するための変数、倍率は曲線の大きさ、角度は三角関数に与える値、回転角と角速度は曲線を回転させる度数です。

[変数]

角速度はスライダー表示にして画面上で変更可能にしています。角速度が正の値の場合は反時計回転、負の値の場合は時計回転になります。

-8度-4度-1度
-8度-4度-1度
2度3度7度
2度3度7度


次に本体です。36本の曲線を描くために二重の繰り返しにしています。曲線を一本描くごとに大きさを小さくし、回転角を更新しています。

[本体]

次に準備です。プログラム開始時に一度だけ行う処理を記述しています。

[準備]

次は「原点に移動」です。一つのSquircleを描き始める座標に移動します。

[原点に移動]

Squircleの式はこうなっています。
\[ \newcommand{\sgn}{\mathop{\rm sgn}\nolimits} x=\sqrt{|\cos(\theta)|} \times r\sgn(\cos(\theta)) \\
y=\sqrt{|\sin(\theta)|} \times r\sgn(\sin(\theta)) \] θは角度、rは倍率、sgnは引数に与えられた値の符号を取り出す関数です。この式をプログラムにすると次のようになります。

[計算]

式にもとづいてX座標Y座標を計算した後に座標を回転させると、最終的なX座標Y座標が確定します。

sgnの定義は次のようになります。与えられた値により、sgn変数に-1, 0, 1のいずれかを設定します。

[符号関数]

次に座標の回転です。(X, Y)を回転前の座標、(X', Y')を回転後の座標、回転する角度をθとすると、回転の公式は
\[ X'=X\cos(\theta)-Y\sin(\theta) \\
Y'=X\sin(\theta)+Y\cos(\theta) \] です。この式をプログラムにするとこうなります。

[回転]

移動はいつも通りです。計算の結果導き出されたX座標Y座標に移動します。

[移動]

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

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