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
#ifndef __CV3D_H
00033
#define __CV3D_H
00034
00035
00036
00037
00039
#include <math.h>
00040
#ifdef _MSC_VER
00041
#if _MSC_VER >= 1300
00042
#include <iostream>
00043
#endif
00044
#else
00045
#include <iostream.h>
00046
#endif
00047
00048
00049
00051
00052
00053
using namespace std;
00054
00056
class CV4D;
00057
00058
00059
00065 class CV3D {
00066
public:
00067
static double epsilon;
00068
00071 CV3D(
void) {
m_ard[0] = 0.0;
00072
m_ard[1] = 0.0;
00073
m_ard[2] = 0.0; };
00074
00077 CV3D(
double rdX,
double rdY,
double rdZ) {
m_ard[0] = rdX;
00078
m_ard[1] = rdY;
00079
m_ard[2] = rdZ; };
00080
00083 CV3D(
const CV3D& Vector) {
m_ard[0] = Vector.
m_ard[0];
00084
m_ard[1] = Vector.
m_ard[1];
00085
m_ard[2] = Vector.
m_ard[2]; };
00086
00088 ~CV3D(
void) {};
00089
00090
00091
00093
00095
00099
operator CV4D() const;
00100
00102 const
CV3D& operator=(const
CV3D&);
00103
00107
bool operator==(const CV3D&) const;
00108
00112
bool operator!=(const CV3D&) const;
00113
00115 CV3D& operator+=(const CV3D&);
00116
00118 CV3D& operator-=(const CV3D&);
00119
00121 CV3D& operator*=(
double);
00122
00124 CV3D& operator/=(
double);
00125
00127 CV3D operator+(const CV3D&) const;
00128
00130 CV3D operator-(const CV3D&) const;
00131
00133 CV3D operator-(
void) const;
00134
00136
double operator*(const CV3D&) const;
00137
00139 CV3D operator*(
double) const;
00140
00142 CV3D operator/(
double) const;
00143
00145 CV3D operator|(const CV3D&) const;
00146
00150 double& operator[](
int i) {
return m_ard[i]; };
00151
00153 double operator[](
int i)
const {
return m_ard[i]; };
00154
00156
friend CV3D operator*(
double,
const CV3D&);
00157
00158
00159
00161
00163
00165 double getMinComponent(
void)
const {
return m_ard[
getMinComponentCoord()]; };
00166
00168 double getAbsMinComponent(
void)
const {
return m_ard[
getAbsMinComponentCoord()]; };
00169
00171 double getMaxComponent(
void)
const {
return m_ard[
getMaxComponentCoord()]; };
00172
00174 double getAbsMaxComponent(
void)
const {
return m_ard[
getAbsMaxComponentCoord()]; };
00175
00177
int getMinComponentCoord(
void) const;
00178
00180
int getAbsMinComponentCoord(
void) const;
00181
00183
int getMaxComponentCoord(
void) const;
00184
00186
int getAbsMaxComponentCoord(
void) const;
00187
00189 double getX(
void)
const {
return m_ard[0]; };
00190
00192 double getY(
void)
const {
return m_ard[1]; };
00193
00195 double getZ(
void)
const {
return m_ard[2]; };
00196
00198 void setX(
double rdX) {
m_ard[0] = rdX; };
00199
00201 void setY(
double rdY) {
m_ard[1] = rdY; };
00202
00204 void setZ(
double rdZ) {
m_ard[2] = rdZ; };
00205
00208 void setCoord(
double rdX,
double rdY,
double rdZ) {
m_ard[0] = rdX;
00209
m_ard[1] = rdY;
00210
m_ard[2] = rdZ;
00211
return; };
00212
00214 double getNorm(
void)
const {
return sqrt(
m_ard[0]*
m_ard[0] +
m_ard[1]*
m_ard[1] +
m_ard[2]*
m_ard[2]); };
00215
00217
void normalize(
void);
00218
00220
CV3D getNormalized(
void) const;
00221
00223
void print(
void) const;
00224
00226 friend ostream& operator<<(ostream&, const
CV3D&);
00227
00229 friend istream& operator>>(istream&, CV3D&);
00230
00231
00232 protected:
00233 double m_ard[3];
00234
00235 };
00236
00237
00238
00239
00240
00241
00242
00243 inline const CV3D& CV3D::operator=(const CV3D& v)
00244
00245 {
00246 m_ard[0] = v[0];
00247 m_ard[1] = v[1];
00248 m_ard[2] = v[2];
00249
return *
this;
00250 }
00251
00252
#endif // _CV3D_H_