pmc/vector.cc
author Markus Bröker <mbroeker@largo.dyndns.tv>
Thu, 16 Apr 2009 12:50:53 +0200
changeset 77 49e0babccb23
parent 65 76514757b0d6
permissions -rw-r--r--
HEADER TAGS The std header tags are now subdir/file.ext committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 * pmc/vector.cc
 * Copyright (C) 2008 Markus Broeker
 */

#include <cmath>
#include <vector.hpp>

#include <cstdio>

using namespace algebra;

Vector::Vector (int xx, int yy)
{
    name = "Vector";
    x = xx;
    y = yy;
    mode = RAD;

    refCounter++;

#ifdef DEBUG
    fprintf (stderr, "New Vector: (%.3d, %.3d)\n", x, y);
#endif
}

Vector::Vector (const Vector & copy)
:x (copy.x), y (copy.y)
{
    fprintf (stderr, "Warning: Copy Constructor: ");
    vector ();
    fprintf (stderr, "\n");
    refCounter++;
}

Vector::~Vector ()
{
#ifdef DEBUG
    fprintf (stderr, "Bye, bye Vector: (%.3d, %.3d)\n", x, y);
#endif
}

int Vector::X ()
{
    return x;
}

int Vector::Y ()
{
    return y;
}

Vector Vector::operator+ (Vector & a)
{
    return Vector (x + a.X (), y + a.Y ());
}

Vector Vector::operator- (Vector & a)
{
    return Vector (x - a.X (), y - a.Y ());
}

double Vector::abs ()
{
    return (std::sqrt (x * x + y * y));
}

void Vector::vector ()
{
    fprintf (stderr, "(%.3d, %.3d)", x, y);
}

double Vector::angle (Vector & v)
{
    if (mode == DEG)
        return ((180.0 / M_PI) * std::acos ((v.X () * X () + v.Y () * Y ()) / (abs () * v.abs ())));

    return (std::acos ((v.X () * X () + v.Y () * Y ()) / (abs () * v.abs ())));
}

void Vector::setMode (Mode m)
{
    mode = m;
}