2 #ifndef GEODESIC_MESH_ELEMENTS_20071231 3 #define GEODESIC_MESH_ELEMENTS_20071231 36 unsigned size(){
return m_size;};
37 iterator
begin(){
return m_begin;};
38 iterator
end(){
return m_begin + m_size;};
40 template<
class DataPo
inter>
43 assert(begin != NULL || size == 0);
51 return *(m_begin + i);
89 unsigned&
id(){
return m_id;};
93 vertex_pointer_vector m_adjacent_vertices;
112 double*
xyz(){
return m_coordinates;};
113 double&
x(){
return *m_coordinates;};
114 double&
y(){
return *(m_coordinates+1);};
115 double&
z(){
return *(m_coordinates+2);};
117 void set(
double new_x,
double new_y,
double new_z)
124 void set(
double* data)
133 double dx = m_coordinates[0] - v[0];
134 double dy = m_coordinates[1] - v[1];
135 double dz = m_coordinates[2] - v[2];
137 return sqrt(dx*dx + dy*dy + dz*dz);
142 return distance(v->
xyz());
160 double m_coordinates[3];
176 bool m_saddle_or_boundary;
190 edge_pointer opposite_edge(vertex_pointer v);
191 vertex_pointer opposite_vertex(edge_pointer e);
192 edge_pointer next_edge(edge_pointer e, vertex_pointer v);
196 for(
unsigned i=0; i<3; ++i)
198 if(adjacent_vertices()[i]->
id() == v->
id())
200 return m_corner_angles[i];
210 double m_corner_angles[3];
227 if(adjacent_faces().
size() == 1)
229 assert(adjacent_faces()[0]->
id() == f->
id());
233 assert(adjacent_faces()[0]->
id() == f->
id() ||
234 adjacent_faces()[1]->id() == f->
id());
236 return adjacent_faces()[0]->
id() == f->
id() ?
237 adjacent_faces()[1] : adjacent_faces()[0];
244 return adjacent_vertices()[0]->id() == v->
id() ?
245 adjacent_vertices()[1] : adjacent_vertices()[0];
250 return adjacent_vertices()[0]->id() == v->
id() ||
251 adjacent_vertices()[1]->id() == v->
id();
256 vertex_pointer
v0(){
return adjacent_vertices()[0];};
257 vertex_pointer
v1(){
return adjacent_vertices()[1];};
279 x = m_length/2.0 + (d0*d0 - d1*d1)/(2.0*m_length);
280 y = sqrt(
std::max(0.0, d0*d0 - x*x));
319 x() = b*v0->
x() + a*v1->
x();
320 y() = b*v0->
y() + a*v1->
y();
321 z() = b*v0->
z() + a*v1->
z();
343 base_pointer& base_element(){
return m_p;};
350 for(
unsigned i=0; i<3; ++i)
352 edge_pointer e = adjacent_edges()[i];
364 for(
unsigned i=0; i<3; ++i)
366 vertex_pointer v = adjacent_vertices()[i];
380 for(
unsigned i=0; i<3; ++i)
382 edge_pointer next = adjacent_edges()[i];
float max(float x, float y)
face_pointer opposite_face(face_pointer f)
void local_coordinates(Point3D *point, double &x, double &y)
bool & saddle_or_boundary()
vertex_pointer_vector & adjacent_vertices()
edge_pointer_vector & adjacent_edges()
SurfacePoint(base_pointer g, double x, double y, double z, PointType t=UNDEFINED_POINT)
void set_allocation(DataPointer begin, unsigned size)
edge_pointer_vector m_adjacent_edges
SimpleVector< face_pointer > face_pointer_vector
SurfacePoint(vertex_pointer v)
SurfacePoint(face_pointer f)
Data & operator[](unsigned i)
void initialize(SurfacePoint const &p)
bool operator==(const HalfEdge &x, const HalfEdge &y)
double vertex_angle(vertex_pointer v)
face_pointer_vector m_adjacent_faces
vertex_pointer opposite_vertex(edge_pointer e)
SurfacePoint(edge_pointer e, double a=0.5)
SimpleVector< edge_pointer > edge_pointer_vector
bool operator<(const HalfEdge &x, const HalfEdge &y)
edge_pointer opposite_edge(vertex_pointer v)
MeshElementBase * base_pointer
double distance(Point3D *v)
SimpleVector< vertex_pointer > vertex_pointer_vector
face_pointer_vector & adjacent_faces()
double distance(double *v)
vertex_pointer opposite_vertex(vertex_pointer v)
bool operator!=(const HalfEdge &x, const HalfEdge &y)
bool belongs(vertex_pointer v)
edge_pointer next_edge(edge_pointer e, vertex_pointer v)