Brunot
Loading...
Searching...
No Matches
Vector4D.h
Go to the documentation of this file.
1// File: Vector4D.h
2// Description: Wrapper class of 2D vectors. Has very little functionality currently implemented
3// Author(s): Ori Balashov (ori.balashov@digipen.edu) Base Implementation
4// Aidan Hartman (aidan.hartman@digipen.edu) Added additional functionality
5// Marcelo Escamilla (marcelo.escamilla@digipen.edu) Added JSON Serialization
6// 2025 / 09 / 17
7// (C) Digipen 2025
8// ____ __ __ __
9// /\__ _\/\ \ /\ \/\ \
10// \/_/\ \/\ \ \___ __ \ \ \_\ \ ___ __ __ ____ __
11// \ \ \ \ \ _ `\ /'__`\ \ \ _ \ / __`\/\ \/\ \ /',__\ /'__`\
12// \ \ \ \ \ \ \ \/\ __/ \ \ \ \ \/\ \L\ \ \ \_\ \/\__, `\/\ __/
13// \ \_\ \ \_\ \_\ \____\ \ \_\ \_\ \____/\ \____/\/\____/\ \____\
14// \/_/ \/_/\/_/\/____/ \/_/\/_/\/___/ \/___/ \/___/ \/____/
15#pragma once
16
17#include "Eigen/Dense"
18#include "System/Json.h"
19
20struct AffineMatrix;
21
23{
24 Vector4D();
25 Vector4D(const Eigen::Vector4f& rhs);
26 Vector4D(float x, float y, float z, float w);
27
28
29 auto operator+=(const Vector4D& rhs) -> Vector4D&;
30 auto operator+(const Vector4D& rhs) const -> Vector4D;
31 auto operator-=(const Vector4D& rhs) -> Vector4D&;
32 auto operator-(const Vector4D& rhs) const -> Vector4D;
33 // Vector scaling
34 auto operator*=(float scalar) -> Vector4D&;
35 auto operator*(float scalar) const -> Vector4D;
36 friend auto operator*(float scalar, const Vector4D&) -> Vector4D;
37 auto operator-() const -> Vector4D;
38
45 friend auto operator*(const AffineMatrix& rhs, const Vector4D& lhs) -> Vector4D;
52 friend auto operator*=(Vector4D& rhs, const AffineMatrix& lhs) -> Vector4D&;
53
55 auto operator*(const Vector4D& rhs) const -> float;
56
58 auto length() const -> float;
59
60 auto x() const -> const float&
61 {
62 return vector[0];
63 }
64
65 auto x() -> float&
66 {
67 return vector[0];
68 }
69
70 auto y() const -> const float&
71 {
72 return vector[1];
73 }
74
75 auto y() -> float&
76 {
77 return vector[1];
78 }
79
80 auto z() const -> const float&
81 {
82 return vector[2];
83 }
84
85 auto z() -> float&
86 {
87 return vector[2];
88 }
89
90 auto w() const -> const float&
91 {
92 return vector[3];
93 }
94
95 auto w() -> float&
96 {
97 return vector[3];
98 }
99
100 // utility functions
101 auto data() const -> const float*
102 {
103 return vector.data();
104 }
105
106 auto data() -> float*
107 {
108 return vector.data();
109 }
110
111 friend auto from_json(const json& j, Vector4D& v) -> void;
112 friend auto to_json(json& j, const Vector4D& v) -> void;
113
114private:
115 Eigen::Vector4f vector;
116};
nlohmann::json json
Definition Json.cpp:19
Definition AffineMatrix.h:30
Definition Vector4D.h:23
auto y() const -> const float &
Definition Vector4D.h:70
Eigen::Vector4f vector
Definition Vector4D.h:115
Vector4D()
Definition Vector4D.cpp:20
auto operator*(float scalar) const -> Vector4D
Definition Vector4D.cpp:67
auto y() -> float &
Definition Vector4D.h:75
auto data() -> float *
Definition Vector4D.h:106
auto w() const -> const float &
Definition Vector4D.h:90
friend auto to_json(json &j, const Vector4D &v) -> void
Definition Vector4D.cpp:119
auto x() const -> const float &
Definition Vector4D.h:60
auto w() -> float &
Definition Vector4D.h:95
auto operator-=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:48
friend auto from_json(const json &j, Vector4D &v) -> void
Definition Vector4D.cpp:111
auto operator*=(float scalar) -> Vector4D &
Definition Vector4D.cpp:61
auto x() -> float &
Definition Vector4D.h:65
auto operator+(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:41
auto z() -> float &
Definition Vector4D.h:85
auto data() const -> const float *
Definition Vector4D.h:101
auto length() const -> float
Magnitude.
Definition Vector4D.cpp:79
auto z() const -> const float &
Definition Vector4D.h:80
auto operator+=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:35
auto operator-(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:54