2009-06-03 5 views
0

私はPoint3.Slerpメソッドを実装しようとしていますので、いくつかのサンプルを探していましたが、見つかったサンプルはすべてのコードをホストする新しいクラスのようです。Point3用にSlerpを実装する方法は?

これを実装する簡単な方法はありますか?基本的に私が見てきたものは、Matrixタイプを使用していました。行列なしでSlerpを実装することはできますか、それは不利な点です(パフォーマンスなど)?

擬似コードも問題ありません。

答えて

3

Spherical linear interpolation PointではなくQuaternionsで通常使用されます。 2つの特定の回転の間を補間しようとしているときには、実際には意味があります。

私が球体の表面に2点を持っていて、測地線の周りにそれらの間に「スラーピング」したいのであれば、これはPoint3に直接関連していることがわかります。その場合、あなたのポイントは実際に補間されるポイントではなく、2つの軸と角度(四元数を定義する)とその間の補間に使用されています。

2つのポイント間の値を補間する場合は、直接線形補間を使用します。

マトリックスを使用することについて - あなたの点を四元数形式にする場合は、quaternion math directlyを使用することができます。行列は必要ありません。

1

あなたはクォータニオンを必要とします。そのため、全く新しいクラスがあります。

2

点slerpは球面(惑星の表面など)で作業する場合に意味があります。

私の頭の上では、回転軸を取得するために開始点と終了点のクロス積を取ると、X、Y、Zの回転を計算することができますあなたが望むように、独自の行列クラスを作成してください)。

http://en.wikipedia.org/wiki/Rotation_matrix#Dimension_three

そのリンクは、軸/角度ペアの回転行列を示します。各コンポーネントの乗算を書き留めて、行列のない情報を簡単に得ることができます。

編集:軸の周りに

相続人は、単純な分解回転(X、Y、Z):

X' = (x^2 + (1 - x^2) * cos(theta) + (x * y * (1 - cos(theta)) - x * sin(theta)) + (x * z * (1 - cos(theta)) + y * sin(theta)) 
Y' = (x * y * (1 - cos(theta)) + z * sin(theta)) + (y^2 + (1 - y^2) * cos(theta)) + (y * z * (1 - cos(theta)) - x * sin(theta)) 
Z' = (x * z * (1 - cos(theta)) - y * sin(theta)) + (y * z * (1 - cos(theta)) + x * sin(theta)) + (z^2 + (1 - z^2) * cos(theta)) 

あなたにもパラメータ化回転をしたいので、あなたがあなたとの間の角度を計算しますベクトル(2つの点のスカラー積の逆余弦)を計算し、補間パラメータに基づいて0とその角度の間の値としてシータを設定します。

関連する問題