Main Page | Class List | Directories | File List | Class Members | File Members

bridge.h

Go to the documentation of this file.
00001 /*
00002  * Physically Based Simulation, SS 2005
00003  *
00004  * Markus Liechti (liechtim@student.ethz.ch)
00005  * Yoshimi Takano (yoshi@student.ethz.ch)
00006  * Stefan Wismer (swismer@student.ethz.ch)
00007  *
00008  * $Id: bridge.h,v 1.23 2005/06/25 20:00:04 ytakano Exp $
00009  */
00010  
00013 #ifndef __bridge_H__
00014 #define __bridge_H__
00015 
00016 #include <vector>
00017 #include <cmath>
00018 #include "structures.h"
00019 #include "smoke.h"
00020 #include "puff.h"
00021 
00023 #define DAMPING 4000.0
00024 
00026 #define DAMPING_SQUARE 3000.0
00027 
00029 #define GRAVITY 9.81
00030 
00032 #define EDGE_DENSITY 1200.0
00033 
00035 #define EDGE_STIFFNESS 10000000.0
00036 
00038 #define EDGE_TENSION_THRESHOLD 0.038
00039 
00041 #define EDGE_PRESSURE_THRESHOLD -0.050
00042 
00043 using namespace std;
00044 
00048 class Bridge {
00049 public:
00051         vector<vertex> vertices;
00052 
00054         vector<edge> edges;
00055 
00057         Puff puff;
00058         
00059         /*
00060          * static methods
00061          */
00062         
00070         void optimize(int level);
00071 
00078         int getNearestVertex(vector2 &pos);
00079         
00085         int getNearestEdge(vector2 &pos);
00086         
00092         bool getRoad();
00093         
00102         int addVertex(int x, int y);
00103         
00111         int addVertex(vertex v);
00112         
00120         int addEdge(int start, int end);
00121         
00128         void deleteVertex(int index);
00129         
00136         void deleteEdge(int index);
00137         
00139         void clear();
00140         
00145         vector2 &getStart(int index);
00146         
00151         vector2 &getEnd(int index);
00152 
00157         vector<int> road;
00158         
00160         int roadStartVertex;
00161         
00163         int roadEndVertex;
00164         
00165         /*
00166          * dynamic methods
00167          */
00168 
00173         void setExternalForces(vector<vertex> &v);
00174         
00183         void addInternalForces(vector<vertex> &v, vector<edge> &e, component stiffness, bool breakableEdges);
00184         
00185 public:
00186         
00191         void initializePhysics();
00192         
00197         void doPhysics(component timestep);
00198         
00199 };
00200 
00201 #endif

Generated on Sun Jul 10 22:32:04 2005 for S12 by  doxygen 1.4.2