का उपयोग करके मैं 2 quaternions गुणा करना चाहता हूं, जो सीवी :: मैट संरचना में संग्रहीत हैं। मैं चाहता हूं कि समारोह जितना संभव हो उतना कुशल हो। मैं निम्नलिखित कोड अब तक है:कुशल सी ++ quaternion गुणा सीवी :: मैट
/** 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 जोड़ - मुझे सुधार के लिए बहुत अधिक जगह नहीं लगती है। फ़ंक्शन इनलाइन बनाएं! मुझे आशा है कि ये "पर" कॉल फ़ंक्शन कॉल नहीं हैं (यानी, उन्हें इनलाइन होना चाहिए)। – JohnB
यह मैट क्लास का ओपनसीवी सदस्य है। मुझे लगता है कि यह मैट elment acces करने के लिए सबसे तेज़ तरीका है, लेकिन मुझे यकीन नहीं है। http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#mat –
जितना संभव हो उतना कुशल? मैट्रिक्स क्लास का उपयोग न करें जो पहले स्थान पर चार-घटक सरणी के रूप में कुछ के रूप में गतिशील स्मृति आवंटन और संदर्भ गिनती करता है। यह आपके अन्य प्रश्नों में से एक के संदर्भ में, नए 'मैटक्स' वर्ग के लिए बिल्कुल सही उपयोग केस है। –