Triangle Class Reference

#include <Triangle.hpp>

Inheritance diagram for Triangle:

Inheritance graph
[legend]
Collaboration diagram for Triangle:

Collaboration graph
[legend]

List of all members.

Public Types

enum  { NumberOfVertices = 3, NumberOfFaces = 3, NumberOfEdges = 3 }
typedef Edge FaceType
enum  Type {
  hexahedron, cartesianHexahedron, hexahedronByEdge, tetrahedron,
  triangle3d, quadrangle3d
}

Public Member Functions

void getBarycentricCoordinates (const TinyVector< 2, real_t > &X, TinyVector< 3, real_t > &lambda) const
size_t numberOfVertices () const
Cell::Type type () const
const TinyVector< 3, real_t > normal () const
Edge edge (size_t i) const
 Triangle ()
 Triangle (const TinyVector< NumberOfVertices, Vertex * > &vertices, const size_t &reference=0)
 Triangle (const Vertex &v0, const Vertex &v1, const Vertex &v2, const size_t &reference=0)
 Triangle (const Triangle &st)
 ~Triangle ()
const Cellmother () const
size_t motherCellFaceNumber () const
void setMother (const Cell *cell, const size_t faceNumber)
bool find (const Vertex *P)
const real_t & volume () const
void replace (Vertex *v0, Vertex *v1)
const bool & isFictitious () const
void setFictitious (const bool &b) const
const size_t & reference () const
size_t & reference ()
Vertexoperator() (const size_t &i)
const Vertexoperator() (const size_t &i) const

Static Public Attributes

static const size_t faces [NumberOfEdges][FaceType::NumberOfVertices] = {{1,2},{2,0},{0,1}}
static const size_t edges [NumberOfEdges][Edge::NumberOfVertices] = {{1,2},{2,0},{0,1}}

Protected Attributes

const Cell__motherCell
size_t __motherCellFaceNumber
size_t __reference
 Reference of the Cell.
real_t __volume
 Volume or surface of the cell.
Vertex ** __vertices
 Pointers on vertices of the cell.
bool __isFictitious
 indicates if the cell is to be taken into accounts for computations

Private Member Functions

void __computeVolume ()


Detailed Description

Definition at line 39 of file Triangle.hpp.


Member Typedef Documentation

Definition at line 63 of file Triangle.hpp.


Member Enumeration Documentation

anonymous enum

Enumerator:
NumberOfVertices  number of vertices
NumberOfFaces  number of faces
NumberOfEdges  number of edges

Definition at line 57 of file Triangle.hpp.

00057        {
00058     NumberOfVertices = 3,       
00059     NumberOfFaces    = 3,       
00060     NumberOfEdges    = 3        
00061   };

enum Cell::Type [inherited]

Enumerator:
hexahedron 
cartesianHexahedron 
hexahedronByEdge 
tetrahedron 
triangle3d 
quadrangle3d 

Definition at line 40 of file Cell.hpp.

00040             {
00041     hexahedron,
00042     cartesianHexahedron,
00043     hexahedronByEdge,
00044     tetrahedron,
00045     triangle3d,
00046     quadrangle3d
00047   };


Constructor & Destructor Documentation

Triangle::Triangle (  )  [inline]

Prepares the structures for the Cells

Definition at line 159 of file Triangle.hpp.

00160     : SurfElem(NumberOfVertices)
00161   {
00162     ;
00163   }

Triangle::Triangle ( const TinyVector< NumberOfVertices, Vertex * > &  vertices,
const size_t &  reference = 0 
) [inline]

Constructs a triangle using 3 vertices.

Parameters:
vertices the vertices of the Triangle
reference the reference of the triangle (default is 0)

Now computes the volume (area) of the triangle

Definition at line 172 of file Triangle.hpp.

References __computeVolume(), Cell::__vertices, and NumberOfVertices.

00174     : SurfElem(NumberOfVertices, reference)
00175   {
00176     for (size_t i=0; i<NumberOfVertices; ++i) {
00177       __vertices[i] = vertices[i];
00178     }
00179 
00181     this->__computeVolume();
00182   }

Here is the call graph for this function:

Triangle::Triangle ( const Vertex v0,
const Vertex v1,
const Vertex v2,
const size_t &  reference = 0 
) [inline]

Constructs a triangle using 3 vertices.

Parameters:
v0 first vertex
v1 second vertex
v2 third vertex
reference the reference of the triangle (default is 0)

Now computes the volume (area) of the triangle

Definition at line 193 of file Triangle.hpp.

References __computeVolume(), and Cell::__vertices.

00197     : SurfElem(NumberOfVertices, reference)
00198   {
00199     __vertices[0] = (Vertex*)&v0;
00200     __vertices[1] = (Vertex*)&v1;
00201     __vertices[2] = (Vertex*)&v2;
00202 
00204     this->__computeVolume();
00205   }

Here is the call graph for this function:

Triangle::Triangle ( const Triangle st  )  [inline]

Copy constructor

Parameters:
st 

Definition at line 213 of file Triangle.hpp.

00214     : SurfElem(st)
00215   {
00216     ;
00217   }

Triangle::~Triangle (  )  [inline]

Destructor

Definition at line 224 of file Triangle.hpp.

00225   {
00226     ;
00227   }


Member Function Documentation

void Triangle::__computeVolume (  )  [inline, private]

Definition at line 44 of file Triangle.hpp.

References Cell::__vertices, and Cell::__volume.

Referenced by Triangle().

00045   {
00046     const TinyVector<3>& X0 = *(__vertices[0]);
00047     const TinyVector<3>& X1 = *(__vertices[1]);
00048     const TinyVector<3>& X2 = *(__vertices[2]);
00049 
00050     const TinyVector<3> A(X1-X0);
00051     const TinyVector<3> B(X2-X0);
00052 
00053     __volume = 0.5*Norm(A^B);
00054   }

void Triangle::getBarycentricCoordinates ( const TinyVector< 2, real_t > &  X,
TinyVector< 3, real_t > &  lambda 
) const [inline]

computes barycentric coordinates in the current triangle related to a given X position.

Parameters:
X Cartesian coordinates
lambda barycentric coordinates
Todo:
This could be optimized
Warning:
this function can only be caught in the planar case

Definition at line 78 of file Triangle.hpp.

Referenced by MeshOfTriangles::find().

00080   {
00081     TinyVector<3, real_t> X2;
00082     X2[0] = X[0];
00083     X2[1] = X[1];
00084     X2[2] = 1;
00085 
00086     TinyMatrix<3, 3, real_t> M = 0;
00087     for (size_t i=0; i<3; ++i) {
00088       const Vertex& V = (*this)(i);
00089       for (size_t j=0; j<2; ++j) {
00090         M(j, i) = V[j];
00091       }
00092     }
00093 
00094     for (size_t i=0; i<3; ++i) {
00095       M(2,i) = 1;
00096     }
00097 
00098     lambda = X2/M;
00099   }

size_t Triangle::numberOfVertices (  )  const [inline, virtual]

The number of vertices of a triangle

Returns:
the number of vertices

Implements Cell.

Definition at line 106 of file Triangle.hpp.

References NumberOfVertices.

00107   {
00108     return NumberOfVertices;
00109   }

Cell::Type Triangle::type (  )  const [inline, virtual]

Access to the type of this cell

Returns:
Cell::triangle3d

Implements Cell.

Definition at line 116 of file Triangle.hpp.

References Cell::triangle3d.

00117   {
00118     return Cell::triangle3d;
00119   }

const TinyVector<3,real_t> Triangle::normal (  )  const [inline, virtual]

Returns the normal to the face.

Returns:
normal

Implements SurfElem.

Definition at line 127 of file Triangle.hpp.

References Cell::__vertices.

00128   {
00129     const TinyVector<3>& v0 = *(__vertices[0]);
00130     const TinyVector<3>& v1 = *(__vertices[1]);
00131     const TinyVector<3>& v2 = *(__vertices[2]);
00132 
00133     const TinyVector<3> A(v1-v0);
00134     const TinyVector<3> B(v2-v0);
00135     TinyVector<3> N(A^B);
00136     const real_t n = Norm(N);
00137     N/=n;
00138     return N;
00139   }

Edge Triangle::edge ( size_t  i  )  const [inline]

Access to the ith edge of the triangle

Parameters:
i the number of the Edge
Returns:
the ith edge of the triangle

Definition at line 148 of file Triangle.hpp.

References Cell::__vertices, ASSERT, and NumberOfVertices.

Referenced by MeshSimplifier::__proceed().

00149   {
00150     ASSERT(i<NumberOfVertices);
00151     return Edge(*__vertices[(i+1)%3], *__vertices[(i+2)%3]);
00152   }

const Cell& SurfElem::mother (  )  const [inline, inherited]

size_t SurfElem::motherCellFaceNumber (  )  const [inline, inherited]

Access to the mother cell face number

Definition at line 65 of file SurfElem.hpp.

References SurfElem::__motherCell, SurfElem::__motherCellFaceNumber, and ASSERT.

00066   {
00067     ASSERT(__motherCell!=0);
00068     return __motherCellFaceNumber;
00069   }

void SurfElem::setMother ( const Cell cell,
const size_t  faceNumber 
) [inline, inherited]

bool Cell::find ( const Vertex P  )  [inline, inherited]

Find the vertex P in the cell

Returns:
bool

Definition at line 69 of file Cell.hpp.

References Cell::__vertices, and Cell::numberOfVertices().

Referenced by Triangulation::__checkLine().

00069                                      {
00070     for(size_t i=0 ; i<numberOfVertices() ; ++i) {
00071       if(__vertices[i]==P) {
00072         return true;
00073       }
00074     }
00075     return false;
00076   }

Here is the call graph for this function:

const real_t& Cell::volume (  )  const [inline, inherited]

void Cell::replace ( Vertex v0,
Vertex v1 
) [inline, inherited]

Replaces a vertex by another

Parameters:
v0 the vertex to replace
v1 the new vertex

Definition at line 94 of file Cell.hpp.

References Cell::__vertices, Cell::numberOfVertices(), stringify(), and ErrorHandler::unexpected.

00095   {
00096     for (size_t i = 0; i<numberOfVertices(); ++i) {
00097       if (__vertices[i] == v0) {
00098         __vertices[i] = v1;
00099         return;
00100       }
00101     }
00102 
00103     const std::string errorMsg
00104       = "vertex "+stringify(v0)+" was not found while replacing "+stringify(v1);
00105 
00106     throw ErrorHandler(__FILE__,__LINE__,
00107                        errorMsg,
00108                        ErrorHandler::unexpected);
00109   }

Here is the call graph for this function:

const bool& Cell::isFictitious (  )  const [inline, inherited]

Read-only access to the fictitious state of the cell

Returns:
true if the cell is fictitious

Definition at line 116 of file Cell.hpp.

References Cell::__isFictitious.

Referenced by FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember().

00117   {
00118     return __isFictitious;
00119   }

void Cell::setFictitious ( const bool &  b  )  const [inline, inherited]

Sets fictitious state of the cell

Note:
method is const since this does not change the cell. Fictitious state is a mutable member!

Definition at line 127 of file Cell.hpp.

References Cell::__isFictitious.

Referenced by FictitiousDomainMethod::Compute().

00128   {
00129     __isFictitious = b;
00130   }

const size_t& Cell::reference (  )  const [inline, inherited]

size_t& Cell::reference (  )  [inline, inherited]

Access to the reference of the Cell.

Returns:
a reference to the reference

Definition at line 161 of file Cell.hpp.

References Cell::__reference.

00162   {
00163     return __reference;
00164   }

Vertex& Cell::operator() ( const size_t &  i  )  [inline, inherited]

Access to the ith Vertex of the Cell.

Parameters:
i the local number of the vertex
Returns:
a reference to a the vertex

Definition at line 173 of file Cell.hpp.

References Cell::__vertices, ASSERT, and Cell::numberOfVertices().

00174   {
00175     ASSERT (i<numberOfVertices());
00176     return *__vertices[i];
00177   }

Here is the call graph for this function:

const Vertex& Cell::operator() ( const size_t &  i  )  const [inline, inherited]

Read-only access to the ith Vertex of the Cell.

Parameters:
i the local number of the vertex
Returns:
a const reference to a the vertex

Definition at line 186 of file Cell.hpp.

References Cell::__vertices, ASSERT, and Cell::numberOfVertices().

00187   {
00188     ASSERT (i<numberOfVertices());
00189     return *(__vertices[i]);
00190   }

Here is the call graph for this function:


Member Data Documentation

const size_t Triangle::faces = {{1,2},{2,0},{0,1}} [static]

Definition at line 65 of file Triangle.hpp.

const size_t Triangle::edges = {{1,2},{2,0},{0,1}} [static]

Definition at line 66 of file Triangle.hpp.

const Cell* SurfElem::__motherCell [protected, inherited]

The mother cell (ie: a 3d element which interacts with the triangle)

Definition at line 47 of file SurfElem.hpp.

Referenced by SurfElem::mother(), SurfElem::motherCellFaceNumber(), SurfElem::operator=(), and SurfElem::setMother().

size_t SurfElem::__motherCellFaceNumber [protected, inherited]

size_t Cell::__reference [protected, inherited]

Reference of the Cell.

Definition at line 51 of file Cell.hpp.

Referenced by Cell::operator=(), and Cell::reference().

real_t Cell::__volume [protected, inherited]

Vertex** Cell::__vertices [protected, inherited]

bool Cell::__isFictitious [mutable, protected, inherited]

indicates if the cell is to be taken into accounts for computations

Definition at line 60 of file Cell.hpp.

Referenced by Cell::isFictitious(), and Cell::setFictitious().


The documentation for this class was generated from the following files:

Generated on Wed Nov 19 00:16:34 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6