]> Shamusworld >> Repos - architektonas/blobdiff - src/vector.cpp
Added preliminary zooming and panning.
[architektonas] / src / vector.cpp
index da0d4c557aae2fe4e68b5df17d8cf0d4ce5f0ccf..58228ca39f75a7cfe9bb1b834dd8f19af4d24bf0 100644 (file)
@@ -25,6 +25,10 @@ Vector::Vector(double xx/*= 0*/, double yy/*= 0*/, double zz/*= 0*/): x(xx), y(y
 {\r
 }\r
 \r
+Vector::Vector(Vector head, Vector tail): x(head.x - tail.x), y(head.y - tail.y), z(head.z - tail.z)\r
+{\r
+}\r
+\r
 Vector Vector::operator=(Vector const v)\r
 {\r
        x = v.x, y = v.y, z = v.z;\r
@@ -129,6 +133,24 @@ Vector& Vector::operator+=(double const v)
        return *this;\r
 }\r
 \r
+// Vector - vector, self assigned\r
+\r
+Vector& Vector::operator-=(Vector const v)\r
+{\r
+       x -= v.x, y -= v.y, z -= v.z;\r
+\r
+       return *this;\r
+}\r
+\r
+// Vector - constant, self assigned\r
+\r
+Vector& Vector::operator-=(double const v)\r
+{\r
+       x -= v, y -= v, z -= v;\r
+\r
+       return *this;\r
+}\r
+\r
 \r
 Vector Vector::Unit(void)\r
 {\r
@@ -169,3 +191,11 @@ double Vector::Dot(Vector v1, Vector v2)
 {\r
        return (v1.x * v2.x) + (v1.y * v2.y) + (v1.z * v2.z);\r
 }\r
+\r
+double Vector::Magnitude(Vector v1, Vector v2)\r
+{\r
+       double xx = v1.x - v2.x;\r
+       double yy = v1.y - v2.y;\r
+       double zz = v1.z - v2.z;\r
+       return sqrt(xx * xx + yy * yy + zz * zz);\r
+}\r