00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012 #ifndef GEN_VEKTOR_H
00013 #define GEN_VEKTOR_H
00014
00016
00017 template<unsigned Dim, unsigned IDim>
00018 class UnitComponentVektor
00019 {
00020 private:
00021
00022 public:
00023
00024 bool operator[](const unsigned int &d) const { return (d==IDim); }
00025 };
00026
00028
00029 template<class T, unsigned Dim, unsigned IDim>
00030 class ComponentVektor
00031 {
00032 private:
00033 T Value;
00034
00035 public:
00036
00037 ComponentVektor() {}
00038 ComponentVektor(T value) : Value(value) {}
00039
00040
00041 T& operator[](const unsigned int &d) { return (d==IDim) ? Value : 0; }
00042 T operator[](const unsigned int &d) const { return (d==IDim) ? Value : 0; }
00043 };
00044
00046
00047
00048
00049
00050
00051
00052
00053
00054 template<class T, unsigned Dim, unsigned IDim>
00055 inline
00056 T& dot_ref(Vektor<T,Dim>& v, const UnitComponentVektor<Dim,IDim>&)
00057 {
00058 return v[IDim];
00059 }
00060
00061 template<class T, unsigned Dim, unsigned IDim>
00062 inline
00063 T& dot_ref(const UnitComponentVektor<Dim,IDim>& , Vektor<T,Dim>& v)
00064 {
00065 return v[IDim];
00066 }
00067
00068
00069
00070
00071 template<class T, unsigned Dim, unsigned IDim>
00072 inline
00073 T dot(const Vektor<T,Dim>& v, const UnitComponentVektor<Dim,IDim>&)
00074 {
00075 return v[IDim];
00076 }
00077
00078 template<class T, unsigned Dim, unsigned IDim>
00079 inline
00080 T dot(const UnitComponentVektor<Dim,IDim>& , const Vektor<T,Dim>& v)
00081 {
00082 return v[IDim];
00083 }
00084
00086
00087
00088
00089
00090
00091
00092
00093 template<class T, unsigned Dim, unsigned IDim>
00094 inline
00095 T dot(const Vektor<T,Dim>& v, const ComponentVektor<T,Dim,IDim>& c)
00096 {
00097 return v[IDim]*c[IDim];
00098 }
00099
00100 template<class T, unsigned Dim, unsigned IDim>
00101 inline
00102 T dot(const ComponentVektor<T,Dim,IDim>& c, const Vektor<T,Dim>& v)
00103 {
00104 return v[IDim]*c[IDim];
00105 }
00106
00107
00108 #endif
00109
00110
00111
00112
00113