1
0
forked from josh/j3ml

Implement Vector2Tests

This commit is contained in:
2023-12-29 01:02:57 -05:00
parent fd4cc4723b
commit d2960b1dc4
9 changed files with 242 additions and 178 deletions

View File

@@ -31,7 +31,8 @@ file(GLOB_RECURSE J3ML_SRC "src/J3ML/*.c" "src/J3ML/*.cpp")
include_directories("include") include_directories("include")
add_library(J3ML SHARED ${J3ML_SRC}) add_library(J3ML SHARED ${J3ML_SRC}
src/J3ML/LinearAlgebra/AxisAngle.cpp)
set_target_properties(J3ML PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(J3ML PROPERTIES LINKER_LANGUAGE CXX)
install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME}) install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})

View File

@@ -11,7 +11,6 @@ namespace LinearAlgebra
class AxisAngle { class AxisAngle {
Vector3 axis; Vector3 axis;
float angle; float angle;
public: public:
AxisAngle(); AxisAngle();
AxisAngle(const Vector3& axis, float angle); AxisAngle(const Vector3& axis, float angle);

View File

@@ -1,12 +1,8 @@
#pragma once #pragma once
#include <J3ML/LinearAlgebra.h> #include <J3ML/LinearAlgebra.h>
#include <cstddef> #include <cstddef>
namespace LinearAlgebra { namespace LinearAlgebra {
// A 2D (x, y) ordered pair. // A 2D (x, y) ordered pair.
class Vector2 { class Vector2 {
public: public:
@@ -16,12 +12,7 @@ namespace LinearAlgebra {
Vector2(float X, float Y); Vector2(float X, float Y);
Vector2(const Vector2& rhs); // Copy Constructor Vector2(const Vector2& rhs); // Copy Constructor
Vector2(Vector2&&) = default; // Move Constructor Vector2(Vector2&&) = default; // Move Constructor
float GetX() const;
float GetY() const;
#if MUTABLE
void SetX(float newX) { x = newX;}
void SetY(float newY) { y = newY; }
#endif
static const Vector2 Zero; static const Vector2 Zero;
static const Vector2 Up; static const Vector2 Up;
static const Vector2 Left; static const Vector2 Left;
@@ -29,16 +20,18 @@ namespace LinearAlgebra {
static const Vector2 Right; static const Vector2 Right;
static const Vector2 NaN; static const Vector2 NaN;
float operator[](std::size_t index); float GetX() const;
float GetY() const;
void SetX(float newX);
void SetY(float newY);
bool IsWithinMarginOfError(const Vector2& rhs, float margin=0.001f) const; bool IsWithinMarginOfError(const Vector2& rhs, float margin=0.001f) const;
bool IsNormalized(float epsilonSq = 1e-5f) const; bool IsNormalized(float epsilonSq = 1e-5f) const;
bool IsZero(float epsilonSq = 1e-6f) const; bool IsZero(float epsilonSq = 1e-6f) const;
bool IsFinite() const;
bool IsPerpendicular(const Vector2& other, float epsilonSq=1e-5f) const; bool IsPerpendicular(const Vector2& other, float epsilonSq=1e-5f) const;
float operator[](std::size_t index);
bool operator == (const Vector2& rhs) const; bool operator == (const Vector2& rhs) const;
bool operator != (const Vector2& rhs) const; bool operator != (const Vector2& rhs) const;
@@ -125,12 +118,8 @@ namespace LinearAlgebra {
Vector2& operator/=(float scalar); Vector2& operator/=(float scalar);
public: public:
#if MUTABLE
float x = 0; float x = 0;
float y = 0; float y = 0;
#else
float x = 0;
float y = 0;
#endif
}; };
} }

View File

@@ -2,6 +2,7 @@
#include <J3ML/LinearAlgebra/Vector3.h> #include <J3ML/LinearAlgebra/Vector3.h>
#include <cstddef> #include <cstddef>
#include <cstdlib>
namespace LinearAlgebra { namespace LinearAlgebra {
@@ -18,14 +19,7 @@ public:
Vector3(Vector3&&) = default; // Move Constructor Vector3(Vector3&&) = default; // Move Constructor
Vector3& operator=(const Vector3& rhs); Vector3& operator=(const Vector3& rhs);
float GetX() const;
float GetY() const;
float GetZ() const;
#if MUTABLE
void SetX(float newX) { x = newX;}
void SetY(float newY) { y = newY;}
void SetZ(float newZ) { z = newZ;}
#endif
static const Vector3 Zero; static const Vector3 Zero;
static const Vector3 Up; static const Vector3 Up;
static const Vector3 Down; static const Vector3 Down;
@@ -35,15 +29,21 @@ public:
static const Vector3 Backward; static const Vector3 Backward;
static const Vector3 NaN; static const Vector3 NaN;
float operator[](std::size_t index) const; float GetX() const;
float GetY() const;
float GetZ() const;
void SetX(float newX);
void SetY(float newY);
void SetZ(float newZ);
bool IsWithinMarginOfError(const Vector3& rhs, float margin=0.001f) const; bool IsWithinMarginOfError(const Vector3& rhs, float margin=0.001f) const;
bool IsNormalized(float epsilonSq = 1e-5f) const; bool IsNormalized(float epsilonSq = 1e-5f) const;
bool IsZero(float epsilonSq = 1e-6f) const; bool IsZero(float epsilonSq = 1e-6f) const;
bool IsFinite() const;
bool IsPerpendicular(const Vector3& other, float epsilonSq=1e-5f) const; bool IsPerpendicular(const Vector3& other, float epsilonSq=1e-5f) const;
float operator[](std::size_t index) const;
bool operator == (const Vector3& rhs) const; bool operator == (const Vector3& rhs) const;
bool operator != (const Vector3& rhs) const; bool operator != (const Vector3& rhs) const;
@@ -68,7 +68,10 @@ public:
// Returns the length of the vector, which is sqrt(x^2 + y^2 + z^2) // Returns the length of the vector, which is sqrt(x^2 + y^2 + z^2)
float Magnitude() const; float Magnitude() const;
static float Magnitude(const Vector3& of); static float Magnitude(const Vector3& of)
{
}
// Returns a float value equal to the magnitudes of the two vectors multiplied together and then multiplied by the cosine of the angle between them. // Returns a float value equal to the magnitudes of the two vectors multiplied together and then multiplied by the cosine of the angle between them.
// For normalized vectors, dot returns 1 if they point in exactly the same direction, // For normalized vectors, dot returns 1 if they point in exactly the same direction,
@@ -127,14 +130,9 @@ public:
public: public:
#if MUTABLE
float x = 0; float x = 0;
float y = 0; float y = 0;
float z = 0; float z = 0;
#else
float x = 0;
float y = 0;
float z = 0;
#endif
}; };
} }

View File

@@ -0,0 +1,8 @@
#include <J3ML/LinearAlgebra/AxisAngle.h>
namespace LinearAlgebra {
AxisAngle::AxisAngle() : axis(Vector3::Zero) {}
AxisAngle::AxisAngle(const Vector3 &axis, float angle) : axis(axis), angle(angle) {}
}

View File

@@ -1 +1,5 @@
#include <J3ML/LinearAlgebra/Matrix4x4.h> #include <J3ML/LinearAlgebra/Matrix4x4.h>
namespace LinearAlgebra {
}

View File

@@ -5,7 +5,6 @@
namespace LinearAlgebra { namespace LinearAlgebra {
Vector2::Vector2(): x(0), y(0) Vector2::Vector2(): x(0), y(0)
{} {}
@@ -172,5 +171,22 @@ const Vector2 Vector2::NaN = {NAN, NAN};
float Vector2::Length(const Vector2 &of) { return of.Length(); } float Vector2::Length(const Vector2 &of) { return of.Length(); }
void Vector2::SetX(float newX) { x = newX;}
void Vector2::SetY(float newY) { y = newY; }
bool Vector2::IsNormalized(float epsilonSq) const {
return std::abs(LengthSquared() - 1.f) <= epsilonSq;
}
bool Vector2::IsZero(float epsilonSq) const {
return LengthSquared() <= epsilonSq;
}
bool Vector2::IsPerpendicular(const Vector2 &other, float epsilonSq) const {
float dot = Dot(other);
return dot*dot <= epsilonSq * LengthSquared() * other.LengthSquared();
}
} }

View File

@@ -188,5 +188,48 @@ namespace LinearAlgebra {
float Vector3::GetZ() const { return z;} float Vector3::GetZ() const { return z;}
void Vector3::SetX(float newX) { x = newX;}
void Vector3::SetY(float newY) { y = newY;}
void Vector3::SetZ(float newZ) { z = newZ;}
Vector3 Vector3::Min(const Vector3 &lhs, const Vector3 &rhs) {
return lhs.Min(rhs);
}
Vector3 Vector3::Max(const Vector3 &lhs, const Vector3 &rhs) {
return lhs.Max(rhs);
}
Vector3 Vector3::Clamp(const Vector3 &min, const Vector3 &input, const Vector3 &max) {
return input.Clamp(min, max);
}
float Vector3::Distance(const Vector3 &from, const Vector3 &to) {
return from.Distance(to);
}
float Vector3::Length(const Vector3 &of) {
return of.Length();
}
float Vector3::LengthSquared(const Vector3 &of) {
return of.LengthSquared();
}
bool Vector3::IsPerpendicular(const Vector3 &other, float epsilonSq) const {
float dot = Dot(other);
return dot*dot <= epsilonSq * LengthSquared() * other.LengthSquared();
}
bool Vector3::IsZero(float epsilonSq) const {
return LengthSquared() <= epsilonSq;
}
bool Vector3::IsNormalized(float epsilonSq) const {
return std::abs(LengthSquared()-1.f) <= epsilonSq;
}
#pragma endregion #pragma endregion
} }

View File

@@ -1,3 +1,9 @@
// #include <gtest/gtest.h>
// Created by josh on 12/26/2023. #include <J3ML/LinearAlgebra/Vector3.h>
//
using Vector3 = LinearAlgebra::Vector3;
TEST(Vector3Test, V3_Constructor_Default)
{
}