00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00013 #ifndef _VECTOR2_H_
00014 #define _VECTOR2_H_
00015
00016 #include <iostream>
00017 #include <cmath>
00018
00019 using namespace std;
00020
00021 struct vertex;
00022
00024 typedef double component;
00025
00029 struct vector2 {
00031 component x;
00032
00034 component y;
00035
00037 vector2() {}
00038
00043 vector2(const component xp, const component yp) : x(xp), y(yp) {}
00044
00046 void operator+=(const component c);
00047
00049 void operator+=(const vector2 &u);
00050
00052 void operator-=(const component c);
00053
00055 void operator-=(const vector2 &u);
00056
00058 void operator*=(const component c);
00059
00061 void operator*=(const vector2 &u);
00062
00064 void operator/=(const component c);
00065
00067 void operator/=(const vector2 &u);
00068
00070 operator vertex();
00071
00073 void operator=(const vertex &v);
00074 };
00075
00077 vector2 operator+(const vector2 &u, const vector2 &v);
00078
00080 vector2 operator+(const vector2 &u, const component c);
00081
00083 vector2 operator+(const component c, const vector2 &u);
00084
00086 vector2 operator-(const vector2 &u, const vector2 &v);
00087
00089 vector2 operator-(const vector2 &u, const component c);
00090
00092 vector2 operator-(const component c, const vector2 &u);
00093
00095 vector2 operator-(const vector2 &u);
00096
00098 component operator*(const vector2 &u, const vector2 &v);
00099
00101 vector2 operator*(const component c, const vector2 &u);
00102
00104 vector2 operator*(const vector2 &u, const component c);
00105
00107 vector2 operator/(const vector2 &u, const vector2 &v);
00108
00110 vector2 operator/(const vector2 &u, const component c);
00111
00113 vector2 operator/(const component c, const vector2 &u);
00114
00116 component operator%(const vector2 &u, const vector2 &v);
00117
00119 bool operator==(const vector2 &u, const vector2 &v);
00120
00122 bool operator!=(const vector2 &u, const vector2 &v);
00123
00125 component length(const vector2 &u);
00126
00128 vector2 normalize(const vector2 &u);
00129
00135 vector2 signSquare(vector2 &v);
00136
00144 vector2 project(vector2 &u, vector2 &vStart, vector2 &vEnd);
00145
00153 bool below(vector2 &u, vector2 &vStart, vector2 &vEnd);
00154
00160 vector2 perpendicular(const vector2 &u);
00161
00168 vector2 rotate(vector2 &u, component theta);
00169
00176 component perturbate(component mu, component sigma);
00177
00186 vector2 perturbate(vector2 &mu, component sigma);
00187
00200 vector2 perturbate(vector2 &u, component sigma1, component theta, component sigma2);
00201
00208 ostream &operator<<(ostream &os, const vector2 &u);
00209
00210 #endif