31 lines
850 B
C++
31 lines
850 B
C++
#include <iostream>
|
|
|
|
template<typename T>
|
|
struct Quaternion {
|
|
T w, x, y, z;
|
|
};
|
|
|
|
template<typename T>
|
|
Quaternion<T> quat_multiply(Quaternion<T> A, Quaternion<T> B) {
|
|
return {
|
|
B.w * A.w - B.x * A.x - B.y * A.y - B.z * A.z,
|
|
B.w * A.x + B.x * A.w - B.y * A.z + B.z * A.y,
|
|
B.w * A.y + B.x * A.z + B.y * A.w - B.z * A.x,
|
|
B.w * A.z - B.x * A.y + B.y * A.x + B.z * A.w
|
|
};
|
|
}
|
|
|
|
int main() {
|
|
Quaternion<double> q1 = {1.0f, 0.0f, 0.0f, 0.0f};
|
|
Quaternion<double> q2 = {0.5f, 0.5f, 0.5f, 0.5f};
|
|
|
|
Quaternion<double> result = quat_multiply(q1, q2); // Returns the result!
|
|
|
|
std::cout << "Result: ("
|
|
<< result.w << ", "
|
|
<< result.x << ", "
|
|
<< result.y << ", "
|
|
<< result.z << ")" << std::endl;
|
|
|
|
return 0;
|
|
} |