00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef _MATH_2D_H_
00043 #define _MATH_2D_H_
00044
00045
00046
00047
00048
00049
00050 #include "DataStructures/DynamicArrayTemplate.h"
00051
00052
00053 #include <vector>
00054
00055
00056
00057
00058
00059
00060 struct Mat3d;
00061 struct Rectangle2d;
00062
00063
00064
00065
00066
00067
00082 struct Vec2d
00083 {
00084 float x, y;
00085 };
00086
00101 struct Mat2d
00102 {
00103 float r1, r2, r3, r4;
00104 };
00105
00106 typedef std::vector<Vec2d> Vec2dList;
00107 typedef CDynamicArrayTemplate<Vec2d> CVec2dArray;
00108
00109
00110
00111
00112
00113
00114
00119 namespace Math2d
00120 {
00121 void SetVec(Vec2d &vec, float x, float y);
00122 void SetVec(Vec2d &vec, const Vec2d &sourceVector);
00123
00124 void SetRotationMat(Mat2d &matrix, float angle);
00125
00126 void MulMatMat(const Mat2d &matrix1, const Mat2d &matrix2, Mat2d &result);
00127 void MulMatVec(const Mat2d &matrix, const Vec2d &vec, Vec2d &result);
00128 void MulMatVec(const Mat2d &matrix, const Vec2d &vector1, const Vec2d &vector2, Vec2d &result);
00129 void MulMatScalar(const Mat2d &matrix, float scalar, Mat2d &result);
00130
00131 void MulVecScalar(const Vec2d &vec, float scalar, Vec2d &result);
00132
00133 void RotateVec(const Vec2d &vec, float angle, Vec2d &result);
00134 void RotateVec(const Vec2d &point, const Vec2d ¢er, float angle, Vec2d &result);
00135
00136 void AddVecVec(const Vec2d &vector1, const Vec2d &vector2, Vec2d &result);
00137 void SubtractVecVec(const Vec2d &vector1, const Vec2d &vector2, Vec2d &result);
00138 void AddToVec(Vec2d &vec, const Vec2d &vectorToAdd);
00139 void SubtractFromVec(Vec2d &vec, const Vec2d &vectorToSubtract);
00140
00141 float ScalarProduct(const Vec2d &vector1, const Vec2d &vector2);
00142 float SquaredLength(const Vec2d &vec);
00143 float Length(const Vec2d &vec);
00144 float Distance(const Vec2d &vector1, const Vec2d &vector2);
00145 float SquaredDistance(const Vec2d &vector1, const Vec2d &vector2);
00146 float Angle(const Vec2d &vector1, const Vec2d &vector2);
00147
00148 void Transpose(const Mat2d &matrix, Mat2d &result);
00149 void Invert(const Mat2d &matrix, Mat2d &result);
00150
00151 void NormalizeVec(Vec2d &vec);
00152
00153 void ApplyHomography(const Mat3d &A, const Vec2d &p, Vec2d &result);
00154
00155 void Average(const Vec2d &vector1, const Vec2d &vector2, Vec2d &result);
00156
00157 void Mean(const CVec2dArray &vectorList, Vec2d &result);
00158 void Mean(const Vec2d *pVectors, int nVectors, Vec2d &result);
00159
00160 void ComputeRectangleCornerPoints(const Rectangle2d &rectangle, Vec2d resultCornerPoints[4]);
00161
00162 extern const Vec2d zero_vec;
00163 }
00164
00165
00166
00167 #endif