right-handed DirectionVector
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 1m49s
Build Docs With Doxygen / Explore-Gitea-Actions (push) Successful in 30s

This commit is contained in:
2024-11-27 19:45:23 -05:00
parent 79e617b780
commit 13a68eea45
3 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
#pragma once
#include <J3ML/LinearAlgebra/Vector3.hpp>
namespace J3ML::LinearAlgebra {
class DirectionVectorRH;
}
/// Direction vector of a given Matrix3x3 RotationMatrix in a Right-handed coordinate space.
class J3ML::LinearAlgebra::DirectionVectorRH : public Vector3 {
private:
// This is purposefully not exposed because these types aren't usually convertable.
explicit DirectionVectorRH(const Vector3& rhs);
public:
static DirectionVectorRH Forward(const Matrix3x3& rhs);
static DirectionVectorRH Backward(const Matrix3x3& rhs);
static DirectionVectorRH Left(const Matrix3x3& rhs);
static DirectionVectorRH Right(const Matrix3x3& rhs);
static DirectionVectorRH Up(const Matrix3x3& rhs);
static DirectionVectorRH Down(const Matrix3x3& rhs);
};

View File

@@ -15,6 +15,7 @@ namespace J3ML::LinearAlgebra
class Matrix4x4;
class Transform2D;
class Transform3D;
class DirectionVectorRH; // A type representing a direction in 3D space.
class Quaternion;

View File

@@ -0,0 +1,38 @@
#include <J3ML/LinearAlgebra/DirectionVector.hpp>
#include <J3ML/LinearAlgebra/Matrix3x3.hpp>
DirectionVectorRH::DirectionVectorRH(const Vector3& rhs) {
x = rhs.x;
y = rhs.y;
z = rhs.z;
}
DirectionVectorRH DirectionVectorRH::Forward(const Matrix3x3& rhs) {
return DirectionVectorRH(rhs.Col(2));
}
DirectionVectorRH DirectionVectorRH::Backward(const Matrix3x3& rhs) {
return DirectionVectorRH(-rhs.Col(2));
}
DirectionVectorRH DirectionVectorRH::Left(const Matrix3x3& rhs) {
return DirectionVectorRH(-rhs.Col(0));
}
DirectionVectorRH DirectionVectorRH::Right(const Matrix3x3& rhs) {
return DirectionVectorRH(rhs.Col(0));
}
DirectionVectorRH DirectionVectorRH::Up(const Matrix3x3 &rhs) {
return DirectionVectorRH(rhs.Col(1));
}
DirectionVectorRH DirectionVectorRH::Down(const Matrix3x3& rhs) {
return DirectionVectorRH(-rhs.Col(1));
}