TriangleSet.h

Go to the documentation of this file.
00001 #ifndef TRIANGLESET_H
00002 #define TRIANGLESET_H
00003 
00011 #include "Triangle.h"
00012 
00013 #include <vector>
00014 #include <math.h>
00015 
00016 #ifndef BUILDING_DOX
00017 struct Triangle;
00018 #endif
00019 
00025 class TriangleSet {
00026 public:
00033     static float distance(Vertex a, Vertex b) {
00034       const float dx = a.x - b.x;
00035       const float dy = a.y - b.y;
00036       const float dz = a.z - b.z;
00037       
00038       return sqrtf(dx*dx + dy*dy + dz*dz);
00039     }
00040 
00048     static Vertex centre(Vertex a, Vertex b) {
00049       return Vertex(
00050           (a.x + b.x)/2,
00051           (a.y + b.y)/2,
00052           (a.z + b.z)/2); 
00053     }
00054 
00060     void add(Triangle *triangle);
00061     
00067     void add(TriangleSet* tset);
00068 
00073     size_t count();
00074 
00080     Triangle& operator[] (unsigned index);
00081 
00090     template <int QUALITY> static float size (Triangle* triangle);
00091 
00098     static TriangleSet* divide(Triangle *triangle);
00099 
00100   private:
00101     typedef std::vector<Triangle> TContainer;
00102     TContainer container_;
00103 
00104 };
00105 
00111 template <> inline float TriangleSet::size<0> (Triangle *t) {
00112   Vertex *v = t->vertex;
00113   float size = 0.0;
00114   for(int i=0; i<3; i++)
00115     size+= distance(v[i], v[(i+1)%3]);
00116   
00117   return size;
00118 }
00119 
00125 template <> inline float TriangleSet::size<1> (Triangle *t) {
00126   Vertex *v = t->vertex;
00127   float length[3];
00128   float sum = 0.0;
00129   for(int i=0; i<3; i++)
00130     sum+= length[i]= distance(v[i], v[(i+1)%3]);
00131   
00132   float size = (sum/=2);
00133   for(int i=0; i<3; i++)
00134     size*= sum-length[i];
00135   
00136   return sqrtf(size);
00137 }
00138 
00139 
00140 #endif // TRIANGLESET_H

Generated on Thu Dec 6 19:33:11 2007 for Radiosity Renderer and Visualizer by  doxygen 1.5.2