Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

PVectorのmultメソッドのエラー

小ネタメモです。

メディアアート系の勉強の流れでThe Nature of CodeやGenative Artなどを読んでいて、それらの本でも使っているのもありますが、Processingでコードを書いています。ちょっとしたものを動かしてみたい、式の動作を確認するのに、丁度良いです。

ジェネラティブ・アート -Processingによる実践ガイド
Matt Pearson
ビー・エヌ・エヌ新社
売り上げランキング: 7,553

The Nature of Code
The Nature of Code
posted with amazlet at 13.05.24
Daniel Shiffman
Nature of Code
売り上げランキング: 34,661

この2冊はオススメです。コードで表現を作るにはどう実装すれば良いのか、考える上での指針になりますね。The Nature of Codeはサイトからpdf版も買えます。内容はとても良いので日本語版出して欲しい。英語だと頭に入りづらい・・・。


その流れで、線形代数をちまちまと勉強してみていて、ProcessingにはPVectorというベクタークラスがあり、それを使ってコードを書いてみているのですが、ベクトルのスカラー積を求めるところで詰まる。

processing 2.0b9環境で

PVector v1, v2;

void setup() {
  noLoop();
  v1 = new PVector(5, 10, 0);
  v2 = new PVector(15, 8, 0); 
}

void draw() {
  ellipse(v1.x, v1.y, 12, 12);
  ellipse(v2.x, v2.y, 12, 12);
  v1.mult(v2);
  ellipse(v1.x, v1.y, 24, 24);
}

上記のコードを実行すると

The method mult(PVector,float) in the type PVector is not applicable for the arguments(PVector)

というエラーが帰ってきて実行出来ないです。

どうやら

  v1.mult(v2);

ここで引っかかっていて

http://processing.org/reference/PVector_mult_.html
にもあるようにmult(v) はシンタックスは有効と書いてあるし、何よりサンプルが書いてある(上コードはまさにそれです)。

  PVector v3=PVector.mult(v1,v2);

このシンタックスも同様のエラーが発生します。

v1.x*=v2.x;
v1.y*=v2.y;

としてもいいのだけどこれは、いまいち腹落ちできない・・・。

ググっても原因がわからなかったので一応書き留めておくことにします。


※追記6/3/2013
Processing 2.0が正式リリースされたので上の問題を確認してみたところ、リファレンスの記述が変更になっていました。
http://processing.org/reference/PVector_mult_.html

これを見るにmultでベクトル同士の積を求めることは出来なくなったようです。残念。