diff options
Diffstat (limited to 'themes/mathlib.h')
| -rw-r--r-- | themes/mathlib.h | 150 | 
1 files changed, 150 insertions, 0 deletions
| diff --git a/themes/mathlib.h b/themes/mathlib.h new file mode 100644 index 0000000..e3c6875 --- /dev/null +++ b/themes/mathlib.h @@ -0,0 +1,150 @@ +// mathlib.h +//  +// Created by Matt Kosarek +//  +// A file containing some common math functionality that I find +// useful in my projects. I don't like that I don't know what's happening +// in glm, so I wrote most of this myself. All mistakes are my own. +// + +#pragma once +#include <cstdio> +#include <cstdlib> +#include <cstring> +#include <cmath> + +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#define ABS(x) (x < 0 ? -x : x) +#define SIGN(x) (x < 0 ? -1 : 1) +#define PI 3.141592653589793238463 +#define DEG_TO_RAD(x) (x * (PI / 180.f)) +#define RAD_TO_DEG(x) (x * (180.f / PI)) + +struct Vector2 { +    float x = 0; +    float y = 0; + +    Vector2 operator+(Vector2 other); +    Vector2& operator+=(Vector2 other); +    Vector2 operator-(Vector2 other); +    Vector2 operator*(float s); +    Vector2 operator/(float s); +    float dot(Vector2 other); +    float length(); +    Vector2 normalize(); +    Vector2 negate(); +    Vector2 getPerp(); +    Vector2 rotate(float angle); +    float determinant(Vector2 other); +     +    void printDebug(const char* name); +}; + +struct Vector3 { +    float x = 0.f; +    float y = 0.f; +    float z = 0.f; + +    Vector3(); +    Vector3(float value); +    Vector3(float x, float y, float z); + +    float length(); +    float dot(const Vector3& other); +    Vector3 scale(float scalar); +    Vector3 add(const Vector3& other); +    Vector3 subtract(const Vector3& other); +    Vector3 negate(); +    Vector3 cross(const Vector3& other); +    Vector3 normalize(); + +    Vector3 operator+(const Vector3& v2); +    Vector3& operator+=(Vector3 other); +    Vector3 operator-(const Vector3& v2); +    Vector3 operator-(); +    Vector3 operator*(float value); +    Vector3 operator*(const Vector3& v2); +    Vector3 operator/(const Vector3& v2); +    float operator[](int index); +     +    void printDebug(const char* name); +}; + +struct Vector4 { +    float x = 0.f; +    float y = 0.f; +    float z = 0.f; +    float w = 1.f; + +    Vector4(); +    Vector4(float value); +    Vector4(float inX, float inY, float inZ, float inW); +    Vector4 fromColor(float r, float g, float b, float a); +	Vector4 toNormalizedColor(); + +    float length(); +    Vector4 normalize(); +    float dot(const Vector4& other); +    Vector4 scale(float scalar); +    Vector4 add(const Vector4& other); +    Vector4 subtract(const Vector4& other); +    Vector4 negate(); +    Vector4 cross(const Vector4& other); + +    Vector4 operator+(const Vector4& v2); +    Vector4 operator-(const Vector4& v2); +    Vector4 operator-(); +    Vector4 operator*(float value); +    Vector4 operator*(const Vector4& v2); +    float operator[](int index); + +    void printDebug(const char* name); +}; + +struct Mat4x4 { +    float m[16] = { +        1, 0, 0, 0, +        0, 1, 0, 0, +        0, 0, 1, 0, +        0, 0, 0, 1 +    }; + +    Mat4x4 copy(); +    Mat4x4 scale(Vector3 v); +    Mat4x4 translate(Vector3 v); +	Mat4x4 translateByVec2(Vector2 v); +    Mat4x4 rotate2D(float angle); +    Mat4x4 getXRotationMatrix(float angleRadians); +    Mat4x4 getYRotationMatrix(float angleRadians); +    Mat4x4 getZRotationMatrix(float angleRadians); +    Mat4x4 rotate(float xRadians, float yRadians, float zRadians); +    Vector2 multByVec2(Vector2 v); +    Vector2 operator*(Vector2 v); +    Mat4x4 multMat4x4(const Mat4x4& other); +    Mat4x4 operator*(const Mat4x4& other); +    Mat4x4 getOrthographicMatrix(float left, float right, float bottom, float top); +    Mat4x4 inverse(); +	Mat4x4 getPerspectiveProjection(float near, float far, float fieldOfViewRadians, float aspectRatio); +	void print(); +}; + +struct Quaternion { +    float w = 0; +    float x = 0; +    float y = 0; +    float z = 0; + +    float operator [](int index); +	Quaternion operator*(const Quaternion& other) const; +	Quaternion operator*(const float& scale) const; +	Quaternion operator+(const Quaternion& other) const; +	Quaternion operator-(const Quaternion& other) const; +	Quaternion interpolate(const Quaternion& other, const float factor); +	Mat4x4 toMatrix() const; +	Quaternion normalize() const; +	float length() const; +	float dot(const Quaternion& other) const; +}; + +Quaternion quaternionFromRotation(Vector3 axis, float angleRadians); | 
