Hatena::ブログ(Diary)

math, programming, and little something to laugh Twitter

2008-06-12

曲線で遊ぼう1

プログラムオブジェクトを動かしたいときなど、線形や円運動などの数式を入れて動かしたりしますが、もう少し複雑な動きをさせるために、いろいろな曲線関数を使って動かしてみましょう。

いろいろある曲線を描く関数を紹介します。


1. アステロイド(astroid)

f:id:aomori-ringo2:20080612232738j:image

f:id:aomori-ringo2:20080612232739j:image



次数を大きくすることによって、さらに鋭角な図形にすることもできます。(次数は奇数)

f:id:aomori-ringo2:20080612233412j:image





2. インボリュート曲線(Involute)

f:id:aomori-ringo2:20080612235336j:image

いわゆる渦巻です。

f:id:aomori-ringo2:20080612235337j:image




こんな式でも渦巻を表すことができます。

f:id:aomori-ringo2:20080612235018j:image

f:id:aomori-ringo2:20080612235232j:image




上と下の図を重ねて見ましょう。

f:id:aomori-ringo2:20080612235338j:image

実は、上の式を90度回転させたものが下の式です。





3. リサジュー曲線(Lissajous' curves)

f:id:aomori-ringo2:20080613000727j:image

aとbの値を変えることでいろいろな形がでてきます。





(i)a=1, b=2

f:id:aomori-ringo2:20080613000728j:image




(ii)a=3, b=4

f:id:aomori-ringo2:20080613000729j:image





4. バラ曲線(Rose Curve)

f:id:aomori-ringo2:20080613002020j:image

一番上の式が媒介変数表示ですが、プログラムに入れるときはrの式は気にしないでx,yをそれぞれ入れれば大丈夫です。

aの値を変えると、下のような図が現れます。




a=3の場合

f:id:aomori-ringo2:20080613002021j:image





a=4の場合

f:id:aomori-ringo2:20080613002022j:image




ところで、媒介変数表示の時点ではaは1つですが、xとyに代入する段階でaの値はそれぞれ別の値で指定することもできそうです。



x側のa=4、y側のa=6の場合

f:id:aomori-ringo2:20080613002023j:image

・・・なにやらすごいものが出てきてしまいました。一見周期性を持っているようには思えないのですが、いろいろ試すことで予測のつかないような動きをさせることができそうです。




さて、もう一度最初のバラ曲線の式に話を戻しましょう。sinで値が制御されていますが、cosにするとどうなるのでしょう?つまり、

f:id:aomori-ringo2:20080613003646j:image

のような式です。

これもきちんと周期性をもった曲線が現れます。

これに対して、さっきと同じような値をいれてみましょう。



(i)a=3の場合

f:id:aomori-ringo2:20080613003647j:image




(ii)a=4の場合

f:id:aomori-ringo2:20080613003648j:image




x側のa=4、y側のa=6の場合

f:id:aomori-ringo2:20080613003649j:image



5. 内サイクロイド(hypocycloid)

f:id:aomori-ringo2:20080613011357j:image

ああっ、式を見て帰らないで!ここが面白いんですから。

この式では星型などの図形を描くことができます。



(i)rc=5, rm=1

f:id:aomori-ringo2:20080613011358j:image



(ii)rc=5, rm=2

f:id:aomori-ringo2:20080613011359j:image




(iii)rc=7, rm=2

f:id:aomori-ringo2:20080613011360j:image



(iv)rc=7, rm=3

f:id:aomori-ringo2:20080613011361j:image


まず円周をrc等分した点をとり、その点をrm個間隔でつないでいく、といった感じです。



6. オリジナルの関数を作る

階段をぴょんぴょん上っていくような動きの関数を作ってみました。

f:id:aomori-ringo2:20080613014008j:image

なにやら複雑そうですが、そんなでもありません。

まず、(0,0)と(1,1)を解にもち、(a,2)を頂点に持つような二次関数を解きました。

あとはそれを(1,1)ずつ足していってやれば出来上がりです。床関数を使ったのがミソですね、プログラムっぽい動きを数式で記述できました。



実際には下図のようなものになります。

f:id:aomori-ringo2:20080613014009j:image


このように数式化するメリットとしては、実装が非常に楽であること。xの値を変化させながらyにぶちこんでいくだけです。

逆にデメリットは、変更がしにくいことですね。一長一短だと思いますが、数学使ってみましょう、ということなので。

これからも何か関数とかできたら公開していきたいと思います。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証