void TriMesh2D::compute_tris() { tri_circumcentres.clear(); tri_barycentres.clear(); for(unsigned int i = 0; i < tris.size(); ++i) { //compute area Vec2f v0 = vertices[tris[i][0]]; Vec2f v1 = vertices[tris[i][1]]; Vec2f v2 = vertices[tris[i][2]]; float area = 0.5f*cross(v1-v0,v2-v0); //flip vertex order if necessary for consistency if(area < 0) { int t = tris[i][1]; tris[i][1] = tris[i][2]; tris[i][2] = t; area = -area; } tri_areas.push_back(area); tri_circumcentres.push_back(circumcentre(v0,v1,v2)); tri_barycentres.push_back(barycentre(v0,v1,v2)); } }
std::vector<double> stetmesh::Tet::getBarycenter(void) const { double * v0 = pTetmesh->_getVertex(pVerts[0]); double * v1 = pTetmesh->_getVertex(pVerts[1]); double * v2 = pTetmesh->_getVertex(pVerts[2]); double * v3 = pTetmesh->_getVertex(pVerts[3]); /*double v0[3], v1[3], v2[3], v3[3]; // Defunct code- now use internal for (uint i=0; i < 3; ++i) // method which returns pointer { v0[i] = v0vec[i]; v1[i] = v1vec[i]; v2[i] = v2vec[i]; v3[i] = v3vec[i]; }*/ steps::math::tet_barycenter(v0, v1, v2, v3, pBaryc); std::vector<double> barycentre(3); barycentre[0] = pBaryc[0]; barycentre[1] = pBaryc[1]; barycentre[2] = pBaryc[2]; return barycentre; }
public: Polaire operator () (const Nuage<Point, std::vector> & nuage) { return Polaire(barycentre(nuage)); }
public: Cartesien operator () (const Nuage<Point, std::vector> & nuage) { return barycentre(nuage); }