帰省の新幹線の中で Proce55ing を使ってちょっとしたプログラムを書いていた時に気づいたのが、Proce55ing(というより、Java)って演算子のオーバーロードに対応してないんじゃん!!ということ。
これは困る。ものすごく困る。行列演算ができないなんてレベルじゃなく、この環境でプログラムを書くのは無理無理!!ってくらい困る。
だって、ベクトルの演算をするときに
Vector3 v1(1,0,0); Vector3 v2(0,1,0); Vector3 v3 = v1+v2;
とかできなくて、
Vector3 v1(1,0,0); Vector3 v2(0,1,0); Vector3 v3 = v1.add(v1,v2);
みたいなことをしないといけないんですよ。これは余りにも直感的じゃなさすぎです。こんなので複雑な計算とかできません。
しかたないので、P5で書いたコードは捨てて C++ で一から書き直すとします。どの道、ある程度動作確認ができたら書きなおすつもりだったのでいいんですけどね。
Proce55ingは手軽にプログラムが書けて描画も楽チンと思っていたのに、いろいろ罠があるなぁ(涙
演算子のオーバーロードはC++を複雑にした元凶の一つだったかと。
設計にもよりますが、
v3 = v1.add(v1,v2);
じゃあなくて
v3 = v1.add(v2);
は、可能です。
この延長で、
v0 = v0.add(v1.mul(5.0).dot(v2)).cross(v3);
なんてのも可能です。
確かに、一目見てコードの挙動がわからなくなる可能性も
大いにあるので、一長一短なんですよね>オーバーロード
私が参考にしたのがP5のサンプルについているVector3Dだったので
この実装のマズさが輪をかけて”えぇぇっ!?”ってなる原因でした。
関数の返り値に this を返してくれるだけでClassiclllさんがおっしゃるような
書き方ができるのに…
拙作Locは”return this”タイプのメソッドと”return new”タイプのメソッドが一通り揃ってます。参考になれば・・・
http://sourceforge.jp/projects/wrj4p5/wiki/ClassLoc
いつも、ありがとうございます!!
参考にさせて頂きます!!
ほんと、参考にできるソースがあるのはありがたいです。