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
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 #ifndef __FK_VECTOR_HEADER__
00073 #define __FK_VECTOR_HEADER__
00074
00075 #include <FK/Base.h>
00076 #include <string>
00077 #include <vector>
00078
00079 const double FK_VECTOREPS = 1.0e-12;
00080
00082 enum fk_Axis {
00083 fk_X,
00084 fk_Y,
00085 fk_Z
00086 };
00087
00088 class fk_OrthoMatrix;
00089 class fk_Matrix;
00090 class fk_FVector;
00091
00093
00110 class fk_Vector {
00111
00112 public:
00113 double x;
00114 double y;
00115 double z;
00116
00118
00123 fk_Vector(double x = 0.0, double y = 0.0, double z = 0.0);
00124
00126 fk_Vector(const fk_Vector &);
00127
00129 fk_Vector(const fk_FVector &);
00130
00132 virtual ~fk_Vector() {}
00133
00135
00136
00138
00145 fk_Vector & operator -(void) const;
00146
00147
00148
00150
00151
00153
00166 bool operator ==(const fk_Vector &) const;
00167
00169
00182 bool operator !=(const fk_Vector &) const;
00183
00185
00196 bool operator >(const fk_Vector &) const;
00197
00199
00210 bool operator <(const fk_Vector &) const;
00211
00213
00216 bool operator >=(const fk_Vector &) const;
00217
00219
00222 bool operator <=(const fk_Vector &) const;
00223
00224
00225
00227
00228
00230 fk_Vector & operator =(const fk_Vector &);
00231
00233 fk_Vector & operator =(const fk_FVector &);
00234
00236
00250 fk_Vector & operator *=(double);
00251
00253
00269 fk_Vector & operator /=(double);
00270
00272
00286 fk_Vector & operator +=(const fk_Vector &);
00287
00289
00303 fk_Vector & operator -=(const fk_Vector &);
00304
00306
00323 fk_Vector & operator *=(const fk_Matrix &);
00324
00326
00343 fk_Vector & operator *=(const fk_OrthoMatrix &);
00344
00345
00347
00348
00350
00356 virtual void set(double x, double y, double z = 0.0);
00357
00359
00368 double dist(void) const;
00369
00371
00381 double dist2(void) const;
00382
00384
00397 bool normalize(void);
00398
00400
00403 virtual void init(void);
00404
00406
00409 bool isZero(void) const;
00410
00412
00427 fk_Vector proj(const fk_Vector &Q) const;
00428
00430
00438 fk_Vector perp(const fk_Vector &Q) const;
00439
00440 #ifndef FK_DOXYGEN_USER_PROCESS
00441
00442 virtual void Print(void) const;
00443 virtual void Print(std::string) const;
00444
00445 #endif
00446
00448
00449 friend double operator *(const fk_Vector &, const fk_Vector &);
00450 friend fk_Vector operator +(const fk_Vector &, const fk_Vector &);
00451 friend fk_Vector operator -(const fk_Vector &, const fk_Vector &);
00452 friend fk_Vector operator *(const fk_Vector &, double);
00453 friend fk_Vector operator *(double, const fk_Vector &);
00454 friend fk_Vector operator /(const fk_Vector &, double);
00455 friend fk_Vector operator ^(const fk_Vector &, const fk_Vector &);
00456
00457 };
00458
00459
00461
00478 double operator *(const fk_Vector &, const fk_Vector &);
00479
00481
00491 fk_Vector operator +(const fk_Vector &, const fk_Vector &);
00492
00494
00504 fk_Vector operator -(const fk_Vector &, const fk_Vector &);
00505
00507
00517 fk_Vector operator *(const fk_Vector &, double);
00518
00520
00530 fk_Vector operator *(double, const fk_Vector &);
00531
00533
00541 fk_Vector operator /(const fk_Vector &, double);
00542
00544
00573 fk_Vector operator ^(const fk_Vector &, const fk_Vector &);
00574
00576
00586 class fk_HVector: public fk_Vector {
00587 public:
00588 double w;
00589
00591 fk_HVector(void);
00592
00594
00598 fk_HVector(const fk_Vector &v, double w = 1.0);
00599
00601 virtual ~fk_HVector() {}
00602
00604 fk_HVector(const fk_HVector &);
00605
00607
00608
00610
00624 bool operator ==(const fk_HVector &) const;
00625
00627
00641 bool operator !=(const fk_HVector &) const;
00642
00643
00645
00646
00648 fk_HVector & operator =(const fk_HVector &);
00649
00651
00654 fk_HVector & operator =(const fk_Vector &);
00655
00657
00672 fk_HVector & operator *=(const fk_Matrix &);
00673
00675
00690 fk_HVector & operator *=(const fk_OrthoMatrix &);
00691
00692
00693
00695
00696
00698
00705 void set(const fk_Vector &v);
00706
00708
00715 void set(const fk_Vector &v, double w);
00716
00718
00726 void set(double x, double y, double z = 0.0);
00727
00729
00736 void set(double x, double y, double z, double w);
00737
00739
00744 void setw(double w);
00745
00747
00751 fk_Vector getV(void) const;
00752
00754
00758 double getw(void) const;
00759
00761
00765 void ispos(void);
00766
00768
00772 void isvec(void);
00773
00775
00778 void init(void);
00779
00780 #ifndef FK_DOXYGEN_USER_PROCESS
00781
00782 void Print(void) const;
00783 void Print(std::string) const;
00784
00785 #endif
00786
00788
00789 friend double operator *(const fk_HVector &, const fk_HVector &);
00790 friend fk_HVector operator *(const fk_Matrix &, const fk_HVector &);
00791 friend fk_HVector operator *(const fk_OrthoMatrix &, const fk_HVector &);
00792
00793 };
00794
00795
00797
00809 double operator *(const fk_HVector &, const fk_HVector &);
00810
00812
00824 fk_HVector operator *(const fk_Matrix &, const fk_HVector &);
00825
00827
00839 fk_HVector operator *(const fk_OrthoMatrix &, const fk_HVector &);
00840
00841
00843
00857 class fk_FVector {
00858 public:
00859 float x;
00860 float y;
00861 float z;
00862
00864 fk_FVector(void);
00865
00867 fk_FVector(const fk_FVector &);
00868
00870
00874 fk_FVector(const fk_Vector &);
00875
00877
00881 fk_FVector & operator =(const fk_Vector &);
00882 };
00883
00884 #endif