pmc/vector.cc
author Markus Bröker <mbroeker@largo.dyndns.tv>
Thu, 16 Apr 2009 12:49:12 +0200
changeset 43 cf8c1b5127b2
parent 42 83b8151b966d
child 45 7197576fedcf
permissions -rw-r--r--
vector.cc Testcase -> Eine Referenz ist günstiger bei Vektoren -> move ist ohne Referenz flexibler -> Es werden weniger Objekte erzeugt und dementsprechend auch wieder zerstört. committer: Markus Bröker <mbroeker@largo.homelinux.org>

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

#include <cmath>
#include <vector.h>

#include <cstdio>

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

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

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;
}