00001
00002
00004
00005 #if !defined(AFX_TKOO3D_H__C733CF65_F6C3_42FF_8BA4_34C3B8B5A6BE__INCLUDED_)
00006 #define AFX_TKOO3D_H__C733CF65_F6C3_42FF_8BA4_34C3B8B5A6BE__INCLUDED_
00007
00008 #if _MSC_VER > 1000
00009 #pragma once
00010 #endif // _MSC_VER > 1000
00011
00012 #include <fcntl.h>
00013 #include <io.h>
00014 #include <stdlib.h>
00015 #include <windows.h>
00016 #include <math.h>
00017
00018
00019
00020
00021
00022 template <class T> class TKoo3d
00023 {
00024
00025 public:
00026 virtual ~TKoo3d()
00027 {
00028
00029 }
00030
00031 T v[3];
00032 inline double vMult(TKoo3d<T>& k)
00033 {
00034 return (v[0]*k.v[0]+v[1]*k.v[1]+v[2]*k.v[2]);
00035 }
00036
00037 inline TKoo3d<T> normalize()
00038 {
00039 double betr=betrag();
00040 return TKoo3d<T>((T)(v[0]/betr),(T)(v[1]/betr),(T)(v[2]/betr));
00041 };
00042 inline TKoo3d<T> absVal()
00043 {
00044 return TKoo3d<T>(fabs(v[0]),fabs(v[1]),fabs(v[2]));
00045 };
00046 inline double betrag()
00047 {
00048 return (sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]));
00049 };
00050 inline TKoo3d(T xu, T yu, T zu)
00051 {
00052
00053 v[0]=xu;
00054 v[1]=yu;
00055 v[2]=zu;
00056 };
00057 inline TKoo3d ()
00058 {
00059
00060 v[0]=(T)0.0;
00061 v[1]=(T)0.0;
00062 v[2]=(T)0.0;
00063 };
00064 inline TKoo3d<T> normVZ()
00065 {
00066 return(TKoo3d<T>(-v[1],v[0],v[2]));
00067 };
00068 inline TKoo3d<T> (T *werte)
00069 {
00070 v[0]=werte[0];
00071 v[1]=werte[1];
00072 v[2]=werte[2];
00073
00074
00075 };
00076 inline TKoo3d<T> getBar2DCoord(TKoo3d< TKoo3d<T> >& Tri)
00077 {
00078 return getBar2DCoord(Tri.v[0],Tri.v[1],Tri.v[2]);
00079 }
00080 inline TKoo3d<T> getBar2DCoord(TKoo3d<T>& X, TKoo3d<T>& Y, TKoo3d<T>& Z)
00081 {
00082 TKoo3d<T> A=X-Z;
00083 TKoo3d<T> B=Y-Z;
00084 TKoo3d<T> C=(*this)-Z;
00085
00086 T det=A.v[0]*B.v[1]-A.v[1]*B.v[0];
00087 T a=(C.v[0]*B.v[1]-C.v[1]*B.v[0])/det;
00088 T b=(A.v[0]*C.v[1]-A.v[1]*C.v[0])/det;
00089 T c=1-a-b;
00090 return TKoo3d<T> (a,b,c);
00091
00092 };
00093
00094 inline TKoo3d<T> operator+(TKoo3d<T>& k)
00095 {
00096 return TKoo3d<T>(k.v[0]+v[0],k.v[1]+v[1],k.v[2]+v[2]);
00097 };
00098 inline TKoo3d<T> operator-(TKoo3d<T>& k)
00099 {
00100 return TKoo3d<T>(v[0]-k.v[0],v[1]-k.v[1],v[2]-k.v[2]);
00101 };
00102 inline TKoo3d<T> operator*(float k)
00103 {
00104 return TKoo3d<T>(v[0]*k,v[1]*k,v[2]*k);
00105 };
00106 inline TKoo3d<T> operator*(TKoo3d<T>& k)
00107 {
00108 return TKoo3d<T>(v[1]*k.v[2]-v[2]*k.v[1],-(v[0]*k.v[2]-v[2]*k.v[0]), v[0]*k.v[1]-v[1]*k.v[0]);
00109 };
00110 inline TKoo3d<T> operator/(float k)
00111 {
00112 return TKoo3d<T>(v[0]/k,v[1]/k,v[2]/k);
00113 };
00114 inline BOOLEAN operator== (TKoo3d<T>& k)
00115 {
00116 return (v[0]==k.v[0])&&(v[1]==k.v[1])&&(v[2]==k.v[2]);
00117 };
00118
00119 template <class A> inline TKoo3d(A& o)
00120 {
00121
00122 v[0]=(T)o.v[0];
00123 v[1]=(T)o.v[1];
00124 v[2]=(T)o.v[2];
00125 };
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 };
00136
00137
00138 #endif // !defined(AFX_TKOO3D_H__C733CF65_F6C3_42FF_8BA4_34C3B8B5A6BE__INCLUDED_)