integrated quaternions into code
This commit is contained in:
22
src/spider/runtime/math/Quat.cpp
Normal file
22
src/spider/runtime/math/Quat.cpp
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#include "Quat.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace spider {
|
||||||
|
|
||||||
|
int quatMain() {
|
||||||
|
Quat<double> q1 = { 1.0f, 0.0f, 0.0f, 0.0f };
|
||||||
|
Quat<double> q2 = { 0.5f, 0.5f, 0.5f, 0.5f };
|
||||||
|
|
||||||
|
Quat<double> result = quat_multiply(q1, q2); // Returns the result!
|
||||||
|
|
||||||
|
std::cout << "Result: ("
|
||||||
|
<< result.w << ", "
|
||||||
|
<< result.x << ", "
|
||||||
|
<< result.y << ", "
|
||||||
|
<< result.z << ")" << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
24
src/spider/runtime/math/Quat.hpp
Normal file
24
src/spider/runtime/math/Quat.hpp
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <spider/runtime/common.hpp>
|
||||||
|
|
||||||
|
namespace spider {
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct Quat {
|
||||||
|
T w, x, y, z;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiplies two quaternions together.
|
||||||
|
*/
|
||||||
|
template<typename T> inline Quat<T> quat_multiply(Quat<T> A, Quat<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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user