前回、Attribute Wrangle(SOP)でPointを追加する方法をやりましたが、
今回はその亜種です。
唐突ですが、トロコイドというものをご存知でしょうか?
サイクロイドともいうそうですが、Wiki曰く、
「円を、ある曲線(円や直線はその特殊な場合)にそってすべらないように転がしたとき、その円の内部または外部の定点が描く曲線」だそうです。
言葉だとよくわからないですねw
こういうヤツです。
円の半径を変えていくと、いろんな模様が出来ます。
こういう曲線を描く、スピログラフという定規があるらしいですね。
Wikiに数式が載ってるのでHoudini上で実装してみましょう。
rc・・・赤い円の半径
rm・・・緑の円の半径
rd・・・描画半径
前回の記事で、Wrangleを使ったpointの作成方法をやったので、今回もそれを使います。
Pointの配置に上記の式を用いてみます。
VEX Expressionはこんな感じになりました。
float theta = radians(ch("theta")); float interval = ch("interval"); float rc = ch("rc"); float rm = ch("rm"); float rd = ch("rd"); for(float i=0; i<theta; i=i+interval){ float x = (rc - rm)*cos(i) + rd*cos((rc-rm)/rm*i); float z = (rc - rm)*sin(i) - rd*sin((rc-rm)/rm*i); addpoint(geoself(), set(x, 0, z)); }
円の半径等はパラメータとして予め用意してから、それを参照してます。
これで出来上がりです。
こういった曲線の面白いところはパラメータをグリグリ変えると、作られる模様もどんどん変わること。
今回はトロコイド曲線を作ってみましたが、数式で作れる図形はいっぱいありそうです。
例えば、super formulaなんてものもあます。きっと探せば他にもあるはずです。
今日はここまで!
変なところがあればご指摘を。
では、また次回!
サンプルファイルはこちら!
「おまけ1」
アレンジ!!
「おまけ2」
記事作成時のボツVer.
これはこれで。
式の+と-を変えたやつです。
・
・
・
[おまけ3]
Houdiniのvimeoページんとこに、まんま同じのが載ってましたわ。
くっ、しかも2カ月前に。
次からは、ネタかぶってないかリサーチしよう。
おまけ2のコードもらえませんか?
どうしても動く円が書けないのでお願いします。
おまけ2のコードには、動く円の記述はないですよ。
図の赤と緑の円は、分かりやすくするためにSOPでCircleをその位置に配置してるだけです。
コードで書いているのは白い曲線部分のみで、このページに記載してあるものとほとんど同じです。
違いは、9行目。式の前半部分と後半部分の繋ぎの-が+になったものです。
float z = (rc – rm)*sin(i) + rd*sin((rc-rm)/rm*i);