2

処理でローカル相対点をワールド(画面)空間に変換する良い方法は何ですか?

たとえば、ProcessingPDEに付属しているFlockingの例を見てください。クラスにrelativeToWorldメソッドとメソッドworldToRelativeを実装するにはどうすればよいですか。Boidこれらのメソッドは、メソッドで実行されるすべての変換を考慮に入れrenderます。

PVectorオブジェクトを変換したいと思っていたので、メソッドのシグネチャは次のようになります。

PVector relativeToWorld(PVector relative) {
    // Take a relative PVector and return a world PVector.
}

PVector worldToRelative(PVector world) {
    // Take a world PVector and return a relative PVector.
}
4

1 に答える 1

2

残念ながら、Processingはそのようなことで人生を楽にすることはできません。変換行列へのアクセスが提供されないため、手動の変換行列/ベクトル乗算を使用する必要があると思います。(興味があれば、同次表現でフレームから標準への変換行列を使用しました)。

警告:これはJavaですぐに解釈されるMathematicaの結果であり、(renderメソッドのように) 1つの回転1つの変換しかないことを前提としています。変換は、locPVectorによってのみ提供されます。

PVector relativeToWorld(PVector relative) {
  float theta = vel.heading2D() + PI/2;
  float r00 = cos(theta);
  float r01 = -sin(theta);
  float r10 = -r01;
  float r11 = r00;
  PVector world = new PVector();
  world.x = relative.x * r00 + relative.y*r01 + loc.x;
  world.y = relative.x * r10 + relative.y*r11 + loc.y;
  return world;
}

PVector worldToRelative(PVector world) {
  float theta = vel.heading2D() + PI/2;
  float r00 = cos(theta);
  float r01 = sin(theta);
  float r10 = -r01;
  float r11 = r00;
  PVector relative = new PVector();
  relative.x = world.x*r00 + world.y*r10 - loc.x*r00 - loc.y*r10;
  relative.y = world.x*r01 + world.y*r11 - loc.x*r01 - loc.y*r11;
  return relative;
}
于 2011-03-30T05:56:03.137 に答える