cv :: Mat 구조체에 저장된 2 쿼터니언을 곱하고 싶습니다. 나는 가능한 한 효율적으로 기능을 원한다. 지금까지 다음 코드를 가지고 있습니다 :cv :: Mat를 이용한 효율적인 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에서 가장 빠른 방법입니까? 고정 소수점 산술을 사용하면 가장 빠를까요?
16 개의 곱셈과 12 개의 덧셈 - 나에게 개선의 여지가별로없는 것 같습니다. 함수를 인라인으로 만드십시오! 이 'at'호출이 함수 호출이 아닌 (즉 인라인이어야 함) 것이 좋겠습니다. – JohnB
이것은 Mat 클래스의 openCV 멤버입니다. 나는 그것이 매트 엘먼트에 접근하는 가장 빠른 방법이라고 생각하지만 확실하지 않습니다. http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#mat –
가능한 한 효율적입니까? 동적 메모리 할당과 참조 계산을하는 행렬 클래스를 사소한 배열로 사용하지 마십시오. 그것은 당신의 다른 질문 중 하나와 관련하여 새로운'Matx' 클래스의 완벽한 사용 사례입니다. –