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() = default;
25 Vector4D(const Eigen::Vector4f& rhs);
26 Vector4D(float x, float y, float z, float w);
27
28 auto operator+=(const Vector4D& rhs) -> Vector4D&;
29 auto operator+(const Vector4D& rhs) const -> Vector4D;
30 auto operator-=(const Vector4D& rhs) -> Vector4D&;
31 auto operator-(const Vector4D& rhs) const -> Vector4D;
32 // Vector scaling
33 auto operator*=(float scalar) -> Vector4D&;
34 auto operator*(float scalar) const -> Vector4D;
35
42 friend auto operator*(const AffineMatrix& rhs, const Vector4D& lhs) -> Vector4D;
49 friend auto operator*=(Vector4D& rhs, const AffineMatrix& lhs) -> Vector4D&;
50
52 auto operator*(const Vector4D& rhs) const -> float;
53
55 auto length() const -> float;
56
57 auto x() const -> const float&
58 {
59 return vector[0];
60 }
61
62 auto x() -> float&
63 {
64 return vector[0];
65 }
66
67 auto y() const -> const float&
68 {
69 return vector[1];
70 }
71
72 auto y() -> float&
73 {
74 return vector[1];
75 }
76
77 auto z() const -> const float&
78 {
79 return vector[2];
80 }
81
82 auto z() -> float&
83 {
84 return vector[2];
85 }
86
87 auto w() const -> const float&
88 {
89 return vector[3];
90 }
91
92 auto w() -> float&
93 {
94 return vector[3];
95 }
96
97 // utility functions
98 auto data() const -> const float*
99 {
100 return vector.data();
101 }
102
103 auto data() -> float*
104 {
105 return vector.data();
106 }
107
108 friend auto from_json(const json& j, Vector4D& v) -> void;
109
110private:
111 Eigen::Vector4f vector;
112};
nlohmann::json json
Definition Json.cpp:19
Definition AffineMatrix.h:30
Definition Vector4D.h:23
auto y() const -> const float &
Definition Vector4D.h:67
Eigen::Vector4f vector
Definition Vector4D.h:111
auto operator*(float scalar) const -> Vector4D
Definition Vector4D.cpp:62
auto y() -> float &
Definition Vector4D.h:72
auto data() -> float *
Definition Vector4D.h:103
auto w() const -> const float &
Definition Vector4D.h:87
Vector4D()=default
auto x() const -> const float &
Definition Vector4D.h:57
auto w() -> float &
Definition Vector4D.h:92
auto operator-=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:43
friend auto from_json(const json &j, Vector4D &v) -> void
Definition Vector4D.cpp:91
auto operator*=(float scalar) -> Vector4D &
Definition Vector4D.cpp:56
auto x() -> float &
Definition Vector4D.h:62
auto operator+(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:36
auto z() -> float &
Definition Vector4D.h:82
auto data() const -> const float *
Definition Vector4D.h:98
auto length() const -> float
Magnitude.
Definition Vector4D.cpp:74
auto z() const -> const float &
Definition Vector4D.h:77
auto operator+=(const Vector4D &rhs) -> Vector4D &
Definition Vector4D.cpp:30
auto operator-(const Vector4D &rhs) const -> Vector4D
Definition Vector4D.cpp:49