Commit 9d4f77b6 authored by Sauvage's avatar Sauvage
Browse files

amélioration du code EdgeSelector_NormalArea

parent 4ed93813
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "Utils/qem.h" #include "Utils/qem.h"
#include "Utils/quadricRGBfunctions.h" #include "Utils/quadricRGBfunctions.h"
#include "Algo/Geometry/curvature.h" #include "Algo/Geometry/curvature.h"
#include "Algo/Geometry/area.h"
namespace CGoGN namespace CGoGN
{ {
...@@ -297,6 +298,7 @@ private: ...@@ -297,6 +298,7 @@ private:
void initEdgeInfo(Dart d) ; void initEdgeInfo(Dart d) ;
void updateEdgeInfo(Dart d) ; void updateEdgeInfo(Dart d) ;
void computeEdgeInfo(Dart d, EdgeInfo& einfo) ; void computeEdgeInfo(Dart d, EdgeInfo& einfo) ;
void computeEdgeMatrix(Dart d) ;
// void recomputeQuadric(const Dart d, const bool recomputeNeighbors = false) ; // void recomputeQuadric(const Dart d, const bool recomputeNeighbors = false) ;
public: public:
......
...@@ -795,10 +795,11 @@ bool EdgeSelector_NormalArea<PFP>::init() ...@@ -795,10 +795,11 @@ bool EdgeSelector_NormalArea<PFP>::init()
TraversorE<MAP> travE(m); TraversorE<MAP> travE(m);
for(Dart dit = travE.begin() ; dit != travE.end() ; dit = travE.next()) for(Dart dit = travE.begin() ; dit != travE.end() ; dit = travE.next())
{ {
const VEC3 e = Algo::Geometry::vectorOutOfDart<PFP>(m, dit, this->m_position) ; computeEdgeMatrix(dit);
edgeMatrix[dit].identity(); // const VEC3 e = Algo::Geometry::vectorOutOfDart<PFP>(m, dit, this->m_position) ;
edgeMatrix[dit] *= e.norm2(); // edgeMatrix[dit].identity();
edgeMatrix[dit] -= Geom::transposed_vectors_mult(e,e) ; // edgeMatrix[dit] *= e.norm2();
// edgeMatrix[dit] -= Geom::transposed_vectors_mult(e,e) ;
} }
for(Dart dit = travE.begin() ; dit != travE.end() ; dit = travE.next()) for(Dart dit = travE.begin() ; dit != travE.end() ; dit = travE.next())
...@@ -874,10 +875,7 @@ void EdgeSelector_NormalArea<PFP>::updateAfterCollapse(Dart d2, Dart dd2) ...@@ -874,10 +875,7 @@ void EdgeSelector_NormalArea<PFP>::updateAfterCollapse(Dart d2, Dart dd2)
Traversor2VE<MAP> te (m,d2); Traversor2VE<MAP> te (m,d2);
for(Dart dit = te.begin() ; dit != te.end() ; dit = te.next()) for(Dart dit = te.begin() ; dit != te.end() ; dit = te.next())
{ {
const VEC3 e = Algo::Geometry::vectorOutOfDart<PFP>(m, dit, this->m_position) ; computeEdgeMatrix(dit);
edgeMatrix[dit].identity();
edgeMatrix[dit] *= e.norm2();
edgeMatrix[dit] -= Geom::transposed_vectors_mult(e,e) ;
} }
// update the multimap // update the multimap
...@@ -968,10 +966,35 @@ void EdgeSelector_NormalArea<PFP>::computeEdgeInfo(Dart d, EdgeInfo& einfo) ...@@ -968,10 +966,35 @@ void EdgeSelector_NormalArea<PFP>::computeEdgeInfo(Dart d, EdgeInfo& einfo)
REAL err = av1 * (M1 * av1) + av2 * (M2 * av2); REAL err = av1 * (M1 * av1) + av2 * (M2 * av2);
/*
// TODO : test to normalize by area
// TODO : not border-safe
REAL area = 0.0;
Traversor2EEaV<MAP> ta (m,d);
for (Dart dita = ta.begin(); dita != ta.end(); dita=ta.next())
{
area += Algo::Geometry::triangleArea<PFP>(m,dita,this->m_position);
}
err /= area ; // résultats sensiblment identiques à ceux sans pris en compte de l'aire.
// err /= area*area ; // ca favorise la contraction des gros triangles : maillages très in-homogènes et qualité géométrique mauvaise
*/
einfo.it = edges.insert(std::make_pair(err, d)) ; einfo.it = edges.insert(std::make_pair(err, d)) ;
einfo.valid = true ; einfo.valid = true ;
} }
template <typename PFP>
void EdgeSelector_NormalArea<PFP>::computeEdgeMatrix(Dart d)
{
const VEC3 e = Algo::Geometry::vectorOutOfDart<PFP>(this->m_map, d, this->m_position) ;
edgeMatrix[d].identity();
edgeMatrix[d] *= e.norm2();
edgeMatrix[d] -= Geom::transposed_vectors_mult(e,e) ;
// TODO : test : try to normalize by area
// edgeMatrix[d] /= e.norm2(); // pas d'amélioration significative par rapport à la version sans normalisation
// edgeMatrix[d] /= e.norm2() * e.norm2(); // étonnament bon : sur certains maillages équivalant à la QEMml
}
/************************************************************************************ /************************************************************************************
* CURVATURE * * CURVATURE *
************************************************************************************/ ************************************************************************************/
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment