私は品種に格納されている2つの四元、::マット構造を乗算します。私はその機能を可能な限り効率的にしたい。私は、これまでに次のコードを持っている:効率的なC++四元数の乗算::マット
/** Quaternion multiplication
*
*/
void multiplyQuaternion(const Mat& q1,const Mat& q2, Mat& q)
{
// First quaternion q1 (x1 y1 z1 r1)
const float x1=q1.at<float>(0);
const float y1=q1.at<float>(1);
const float z1=q1.at<float>(2);
const float r1=q1.at<float>(3);
// Second quaternion q2 (x2 y2 z2 r2)
const float x2=q2.at<float>(0);
const float y2=q2.at<float>(1);
const float z2=q2.at<float>(2);
const float r2=q2.at<float>(3);
q.at<float>(0)=x1*r2 + r1*x2 + y1*z2 - z1*y2; // x component
q.at<float>(1)=r1*y2 - x1*z2 + y1*r2 + z1*x2; // y component
q.at<float>(2)=r1*z2 + x1*y2 - y1*x2 + z1*r2; // z component
q.at<float>(3)=r1*r2 - x1*x2 - y1*y2 - z1*z2; // r component
}
これはOpenCVの持つ最速の方法ですか?固定小数点演算を使用すると最速でしょうか?異なる画素にアクセスするためのthisチュートリアル異なる方法で
16回の乗算と12回の加算 - 私には改善の余地があるようには思えません。機能をインラインにする!私はこれらの "at"コールが関数呼び出しではない(つまりインラインである)ことを願っています。 – JohnB
これは、MatクラスのopenCVメンバーです。私はそれがMat elmentにアクセスする最も速い方法だと思うが、わからない。 http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#mat –
できるだけ効率的ですか?動的なメモリ割り当てと、何かのための参照カウントを行う行列クラスを、最初は4要素配列と同じように使用しないでください。それはまさにあなたの他の質問の1つに関連して、新しい 'Matx'クラスの完璧なユースケースです。 –