aboutsummaryrefslogtreecommitdiff
path: root/include/fml/vec3.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/fml/vec3.h')
-rw-r--r--include/fml/vec3.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/include/fml/vec3.h b/include/fml/vec3.h
new file mode 100644
index 0000000..3460c56
--- /dev/null
+++ b/include/fml/vec3.h
@@ -0,0 +1,39 @@
+#ifndef VEC3_H
+#define VEC3_H
+#include <iostream>
+
+#include "fml.h"
+
+namespace fml {
+ class vec3 {
+ public:
+ scalar v[3];
+ public:
+ vec3();
+ vec3(scalar x);
+ vec3(scalar x, scalar y, scalar z);
+ scalar &operator[](int index);
+ scalar operator[](int index) const;
+ vec3 operator*(scalar scale) const;
+ vec3 operator/(scalar scale) const;
+ vec3 operator+(const vec3 &other) const;
+ vec3 operator-(const vec3 &other) const;
+ vec3 operator-() const;
+ const vec3 &operator*=(scalar scale);
+ const vec3 &operator/=(scalar scale);
+ const vec3 &operator+=(const vec3 &other);
+ const vec3 &operator-=(const vec3 &other);
+ scalar magnitude() const;
+ scalar magnitudeSquared() const;
+ vec3 normalize() const;
+ scalar dot(const vec3 &other) const;
+ vec3 cross(const vec3 &other) const;
+ };
+
+ vec3 operator*(scalar scale, const vec3 &v);
+
+ std::ostream &operator<<(std::ostream &output, const vec3 &v);
+ std::istream &operator>>(std::istream &input, vec3 &v);
+}
+
+#endif