mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2025-12-16 12:31:47 +01:00
110 lines
3.1 KiB
C++
110 lines
3.1 KiB
C++
#pragma once
|
|
#include "structs.h"
|
|
|
|
struct Vector2f final
|
|
{
|
|
// -------------------------
|
|
// Constructors
|
|
// -------------------------
|
|
Vector2f( );
|
|
explicit Vector2f( float x, float y );
|
|
explicit Vector2f( const Point2f& fromPoint, const Point2f& tillPoint );
|
|
explicit Vector2f( const Point2f& point );
|
|
|
|
// -------------------------
|
|
// Member operators
|
|
// -------------------------
|
|
Vector2f operator-( ) const;
|
|
Vector2f operator+( ) const;
|
|
Vector2f& operator*=( float rhs);
|
|
Vector2f& operator/=( float rhs);
|
|
Vector2f& operator+=( const Vector2f& rhs);
|
|
Vector2f& operator-=( const Vector2f& rhs);
|
|
explicit operator Point2f();
|
|
|
|
// -------------------------
|
|
// Methods
|
|
// -------------------------
|
|
// Convert to Point2f
|
|
Point2f ToPoint2f( ) const;
|
|
|
|
// Are two vectors equal within a threshold?
|
|
// u.Equals(v)
|
|
bool Equals( const Vector2f& other, float epsilon = 0.001f ) const;
|
|
|
|
// Convert to String
|
|
std::string ToString( ) const;
|
|
|
|
// DotProduct
|
|
// float d = u.DotProduct(v);
|
|
float DotProduct( const Vector2f& other ) const;
|
|
|
|
// CrossProduct
|
|
// float d = u.CrossProduct(v);
|
|
float CrossProduct( const Vector2f& other ) const;
|
|
|
|
// Norm of a vector
|
|
// float l = v.Norm();
|
|
float Norm( ) const;
|
|
|
|
// Length of a vector:
|
|
// float l = v.Length();
|
|
float Length( ) const;
|
|
|
|
// Square Length of a vector.
|
|
// Faster alternative for Length, sqrt is not executed.
|
|
float SquaredLength( ) const;
|
|
|
|
// AngleWith returns the smallest angle with another vector within the range [-PI/2, PI/2].
|
|
// A pos angle is counter clockwise from this to the other
|
|
// float angle = u.AngleWith(v);
|
|
float AngleWith( const Vector2f& other ) const;
|
|
|
|
|
|
// Returns normalized form of a vector
|
|
// Vector2f n = v.Normalized();
|
|
Vector2f Normalized( float epsilon = 0.001f ) const;
|
|
|
|
// Returns the orthogonal of the Vector2f
|
|
// Vector2f w = v.Orthogonal();
|
|
Vector2f Orthogonal( ) const;
|
|
|
|
// Returns a vector that is the reflection of the Vector2f
|
|
// surfaceNormal: represents the normal of the surface at the reflection point
|
|
Vector2f Reflect( const Vector2f& surfaceNormal ) const;
|
|
|
|
// Sets the values of x and y
|
|
void Set( float newX, float newY );
|
|
|
|
// -------------------------
|
|
// Datamembers
|
|
// -------------------------
|
|
float x;
|
|
float y;
|
|
};
|
|
// -------------------------
|
|
// Non member operators
|
|
// -------------------------
|
|
Vector2f operator*( float lhs, Vector2f rhs );
|
|
Vector2f operator*( Vector2f lhs, float rhs );
|
|
Vector2f operator/( Vector2f lhs, float rhs );
|
|
|
|
Vector2f operator+( Vector2f lhs, const Vector2f& rhs );
|
|
Vector2f operator-( Vector2f lhs, const Vector2f& rhs );
|
|
|
|
bool operator==( const Vector2f& lhs, const Vector2f& rhs );
|
|
bool operator!=( const Vector2f& lhs, const Vector2f& rhs );
|
|
|
|
std::ostream& operator<< ( std::ostream& lhs, const Vector2f& rhs );
|
|
|
|
// Translating a point by a vector
|
|
Point2f& operator+=(Point2f& lhs, const Vector2f& rhs);
|
|
Point2f operator+(Point2f lhs, const Vector2f& rhs);
|
|
|
|
Point2f& operator-=(Point2f& lhs, const Vector2f& rhs);
|
|
Point2f operator-(Point2f lhs, const Vector2f& rhs);
|
|
|
|
// The difference vector between 2 points
|
|
Vector2f operator-( const Point2f& lhs, const Point2f& rhs);
|
|
|