2009-07-06 26 views
3

++我々は、任意の軸の周りのポイントを回転させることができます。楕円回転行列? Cでは

 
    void radRotateAxis(float a, float b, float c, float theta) 
    { 
    float newX = (
     x*(a*a*(1-cos(theta)) + cos(theta) ) + 
     y*(a*b*(1-cos(theta)) - c*sin(theta)) + 
     z*(a*c*(1-cos(theta)) + b*sin(theta))); 

    float newY = (
     x*(a*b*(1-cos(theta)) + c*sin(theta)) + 
     y*(b*b*(1-cos(theta)) + cos(theta) ) + 
     z*(b*c*(1-cos(theta)) - a*sin(theta)) ); 

    float newZ = (
     x*(a*c*(1-cos(theta)) - b*sin(theta)) + 
     y*(b*c*(1-cos(theta)) + a*sin(theta)) + 
     z*(c*c*(1-cos(theta)) + cos(theta) ) ); 

    x = newX ; 
    y = newY ; 
    z = newZ ; 
    } 

しかし、我々はシータ0歩く - > 2PIをこれは、あなたがおよそ

を回転している軸の周りに「単位円」の周りにポイントを取ります

私たちはどのようにシータを作ることができますか0 - > 2PI結果は約ellipse幅a、高さbですか?

軸の周りを回転させた後に変換行列をポイントに適用したくないのです - 私が探しているのは、誰かがそのようなことを知っていれば、 "楕円形の"回転行列です!

+0

具体的な数学フォーラムで質問することをお勧めします。 – Noldorin

+0

まず、aとbはコード上の変数であるため、楕円にはaとbを使用しないでください。 第2に、省略記号の軸の向きを指定する必要があります。 これで、サーファスパスを楕円パスに変換するためにシータに応じてスケーリングを行うことができます。 –

答えて

6

ターゲット楕円を適切な単位円に合わせるために行列Aを定義します。

次に、Aの構成、回転行列、およびAの逆行列は、あなたの楕円回転行列です。