aboutsummaryrefslogtreecommitdiff
path: root/src/vector.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vector.h')
-rw-r--r--src/vector.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/vector.h b/src/vector.h
new file mode 100644
index 0000000..55c7663
--- /dev/null
+++ b/src/vector.h
@@ -0,0 +1,45 @@
+#include <cmath>
+
+inline double sq(double x) noexcept {
+ return x * x;
+}
+
+struct Vector {
+ double data[2];
+
+ double comp(int x, int y) const {
+ return x*data[0] + y*data[1];
+ }
+
+ double norm() const {
+ return std::sqrt(sq(data[0]) + sq(data[1]));
+ }
+
+ double& operator[](std::size_t i) {
+ return data[i];
+ }
+
+ double operator[](std::size_t i) const {
+ return data[i];
+ }
+
+ Vector operator*(double scalar) const {
+ return Vector{
+ data[0] * scalar,
+ data[1] * scalar
+ };
+ }
+
+ Vector& operator+=(const Vector& rhs) {
+ data[0] += rhs[0];
+ data[1] += rhs[1];
+ return *this;
+ }
+};
+
+Vector operator*(double scalar, const Vector& vec) {
+ return Vector{
+ vec[0] * scalar,
+ vec[1] * scalar
+ };
+}