SaturnRingLibrary 0.9.1
SGL wrapper
 
Loading...
Searching...
No Matches
SRL::Math::Types::Vector2D Struct Reference

Detailed Description

A high-performance two-dimensional vector implementation using fixed-point arithmetic.

Vector2D provides a comprehensive set of 2D vector operations optimized for Saturn hardware. It uses fixed-point arithmetic (Fxp) for all components to avoid floating-point operations while maintaining high precision.

Key features:

  • Memory-efficient representation (two Fxp values)
  • Comprehensive set of vector operations (dot product, normalization, etc.)
  • Optimized for performance-critical rendering and physics calculations
  • Consistent behavior across all platforms through fixed-point arithmetic
  • Support for various precision levels in calculations

Common applications:

  • 2D positions and translations
  • Texture coordinates
  • Screen-space calculations
  • Physics simulations (velocities, forces)
  • User interface positioning

The implementation follows a right-handed coordinate system where:

  • Positive X points right
  • Positive Y points up
Note
Most operations are constexpr and can be evaluated at compile time for improved runtime performance.
See also
Vector3D For 3D vector operations
Fxp For details on the fixed-point implementation

#include <vector2d.hpp>

Inheritance diagram for SRL::Math::Types::Vector2D:
SRL::Math::Types::Vector3D

Public Member Functions

constexpr Vector2D ()
 Default constructor, initializes all coordinates to 0.
 
constexpr Vector2D (const Fxp &fxp)
 Constructor to initialize all coordinates with the same value.
 
constexpr Vector2D (const Fxp &valueX, const Fxp &valueY)
 Constructor to initialize coordinates with specific values.
 
constexpr Vector2D (const Vector2D &vec)
 Copy constructor.
 
constexpr Vector2D Abs () const
 Calculate the absolute values of each coordinate.
 
constexpr Fxp Cross (const Vector2D &vec) const
 Calculate the cross product (z-component) of this vector and another Vector2D.
 
template<Precision P = Precision::Default>
constexpr Fxp DistanceTo (const Vector2D &other) const
 Calculate the Euclidean distance from this vector to another vector.
 
constexpr Fxp Dot (const Vector2D &vec) const
 Calculate the dot product of this vector with another vector.
 
template<Precision P = Precision::Default>
constexpr Fxp Length () const
 Calculate the length of the vector.
 
constexpr Fxp LengthSquared () const
 Calculate the squared length of the vector.
 
template<Precision P = Precision::Default>
constexpr Vector2D Normalize () const
 Normalize the vector.
 
constexpr bool operator!= (const Vector2D &vec) const
 Check if two Vec3 objects are not equal.
 
constexpr Vector2D operator* (const Fxp &scalar) const
 Scalar multiplication operator.
 
template<typename T>
requires std::is_integral_v<T>
constexpr Vector2D operator* (const T &scalar) const
 Scalar multiplication operator for integral types.
 
constexpr Vector2Doperator*= (const Fxp &scalar)
 Compound multiplication assignment operator.
 
template<typename T>
requires std::is_integral_v<T>
constexpr Vector2Doperator*= (const T &scalar)
 Compound multiplication assignment operator for integral types.
 
constexpr Vector2D operator+ (const Vector2D &vec) const
 Vector addition operator.
 
constexpr Vector2Doperator+= (const Vector2D &vec)
 Compound addition assignment operator.
 
constexpr Vector2D operator- () const
 Unary negation operator.
 
constexpr Vector2D operator- (const Vector2D &vec) const
 Vector subtraction operator.
 
constexpr Vector2Doperator-= (const Vector2D &vec)
 Compound subtraction assignment operator.
 
constexpr Vector2D operator/ (const Fxp &scalar) const
 Scalar division operator.
 
template<typename T>
requires std::is_integral_v<T>
constexpr Vector2D operator/ (const T &scalar) const
 Scalar division operator for integral types.
 
constexpr Vector2Doperator/= (const Fxp &scalar)
 Compound division assignment operator.
 
template<typename T>
requires std::is_integral_v<T>
constexpr Vector2Doperator/= (const T &scalar)
 Compound division assignment operator for integral types.
 
constexpr bool operator< (const Vector2D &vec) const
 Less than operator.
 
constexpr Vector2D operator<< (const size_t &shiftAmount)
 Bitwise left shift operator.
 
constexpr Vector2Doperator<<= (const size_t &shiftAmount)
 Bitwise left shift assignment operator.
 
constexpr bool operator<= (const Vector2D &vec) const
 Less than or equal operator.
 
constexpr Vector2Doperator= (const Vector2D &vec)
 Assignment operator.
 
constexpr bool operator== (const Vector2D &vec) const
 Check if two Vec3 objects are not equal.
 
constexpr bool operator> (const Vector2D &vec) const
 Greater than operator.
 
constexpr bool operator>= (const Vector2D &vec) const
 Greater than or equal operator.
 
constexpr Vector2D operator>> (const size_t &shiftAmount)
 Bitwise right shift operator.
 
constexpr Vector2Doperator>>= (const size_t &shiftAmount)
 Bitwise right shift assignment operator.
 
template<SortOrder O = SortOrder::Ascending>
constexpr Vector2D Sort () const
 Sort coordinates in specified order.
 

Static Public Member Functions

static void DotAccumulate (const Vector2D &first, const Vector2D &second)
 Helper function to perform assembly-level dot product calculation and accumulation.
 
static consteval Vector2D Down ()
 Get a vector pointing down (0,-1).
 
static consteval Vector2D Left ()
 Get a vector pointing left (-1,0).
 
template<typename... Pairs>
static constexpr Fxp MultiDotAccumulate (const Pairs &... pairs)
 Calculate and accumulate the dot products of multiple 2D vector pairs.
 
static consteval Vector2D One ()
 Get a vector with all components set to one (1,1).
 
static consteval Vector2D Right ()
 Get a vector pointing right (1,0). Same as UnitX(), provided for semantic clarity.
 
static consteval Vector2D UnitX ()
 Get a unit vector pointing along the X axis (1,0).
 
static consteval Vector2D UnitY ()
 Get a unit vector pointing along the Y axis (0,1).
 
static consteval Vector2D Up ()
 Get a vector pointing up (0,1). Same as UnitY(), provided for semantic clarity.
 
static consteval Vector2D Zero ()
 Get a zero vector (0,0).
 

Public Attributes

Fxp X
 
Fxp Y