Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Made by MLM
- // Thanks to Amble Lighthertz(http://codereview.stackexchange.com/questions/11934/c-vector2-class-review) for the operator overloading snippets
- #if defined(CORE_TEENSY)
- #include "Arduino.h"
- #else
- // pow and sqrt
- #include <math.h>
- #endif
- #include "Vector2.h"
- const Vector2 Vector2::zero(0, 0);
- const Vector2 Vector2::one(1, 1);
- const Vector2 Vector2::invalid(false);
- float x;
- float y;
- bool isValid = true;
- Vector2::Vector2()
- {
- this->init(0, 0);
- }
- Vector2::Vector2(float x, float y)
- {
- this->init(x, y);
- }
- Vector2::Vector2(int x, int y)
- {
- this->init((float)x, (float)y);
- }
- Vector2::Vector2(unsigned int x, unsigned int y)
- {
- this->init((float)x, (float)y);
- }
- Vector2::Vector2(bool isValid)
- {
- if(isValid) {
- this->init(0, 0);
- }
- this->isValid = isValid;
- }
- Vector2::Vector2(const Vector2& vec)
- {
- this->copy(vec);
- }
- void Vector2::init(float x, float y)
- {
- this->x = x;
- this->y = y;
- }
- void Vector2::init(float x, float y, bool isValid)
- {
- this->init(x, y);
- this->isValid = isValid;
- }
- void Vector2::copy(const Vector2& vec)
- {
- this->init(vec.x, vec.y, vec.isValid);
- }
- float Vector2::magnitude()
- {
- return sqrt(pow(this->x, 2) + pow(this->y, 2));
- }
- Vector2 Vector2::normalized()
- {
- float length = this->magnitude();
- Vector2 unitVector(Vector2(this->x/length, this->y/length));
- return unitVector;
- }
- /* */
- // assignment operator
- Vector2& Vector2::operator= (const Vector2& v) {
- // Check for self-assignment!
- if (this == &v) {
- return *this;
- }
- this->copy(v);
- return *this;
- }
- /* */
- // For making something negative
- Vector2& Vector2::operator- (void) {
- x = -x;
- y = -y;
- return *this;
- }
- // equality operators
- bool Vector2::operator == (const Vector2 & v) { return (x == v.x) && (y == v.y); }
- bool Vector2::operator != (const Vector2 & v) { return !(*this == v); }
- // scaler to this operators
- Vector2& Vector2::operator+= (float s) { x += s; y += s; return *this; }
- Vector2& Vector2::operator-= (float s) { x -= s; y -= s; return *this; }
- Vector2& Vector2::operator*= (float s) { x *= s; y *= s; return *this; }
- Vector2& Vector2::operator/= (float s) { x /= s; y /= s; return *this; }
- // scaler to vector2 operators
- Vector2 Vector2::operator+ (float s) { Vector2 r(*this); return r += s; }
- Vector2 Vector2::operator- (float s) { Vector2 r(*this); return r -= s; }
- Vector2 Vector2::operator* (float s) { Vector2 r(*this); return r *= s; }
- Vector2 Vector2::operator/ (float s) { Vector2 r(*this); return r /= s; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement