Improve stopping conditions in surface meshing (and throughout GC)
@MarkGillespie ci sta già lavorando.
Dal 21/1/2023.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
This issue addresses a small road bump with the remesh function, but is more generally something good to think about throughout the design of GC: how should stopping criteria be determined, and what control should be provided to the user?
Issue
Currently the stopping condition in remesh is
if ((nFlips == 0) && (flowDist < 0.01)) break;
Even though the quantity flowDist is normalized by the number of mesh vertices, the constant (0.01) is pretty arbitrary and often does not yield the desired/expected behavior.
Especially annoying is that one can't get more smoothing by increasing the maxIterations option, since the optimizer will quit as soon as flowDist is less than 0.01.
Proposed Solution
Three possibilities come to mind:
- Add an additional option
relativeStoppingTolerancewhich is used in place of the magic constant0.01. This is a no-brainer. - Measure the relative norm of the gradient. This requires us to assign a variational interpretation to the smoothing operations, but that seems reasonably straightforward: Laplacian smoothing is minimizing Dirichlet energy, restricted to tangential motions; circumcentric smoothing is likewise minimizing the optimal Delaunay energy among tangential motions. (I believe de Goes et al discuss how to think about ODT in terms of energy minimization in the non-flat case.)
- Add an additional option
minIterationsthat forces the optimizer to take at least this many iterations. In general, such a parameter is good to have: no matter how careful you are with designing stopping criteria, there tend to be cases where this automatic condition stopped to early—or at very least, the user would like to see what happens if you "just keep on going." For instance, in the remeshing case, it's clear just from looking at the output meshes that they are not always as smooth/regular as they could be.
- Lingua principale
- C++
- Stelle
- 1.3k
- Fork
- 183
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di nmwsharp/geometry-central
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
nmwsharp/geometry-central#256 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
nmwsharp/geometry-central#255 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
nmwsharp/geometry-central#253 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 57/100
nmwsharp/geometry-central#247 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
nmwsharp/geometry-central#246 ·
Tutte le issue di nmwsharp/geometry-central
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
flutter-webrtc/flutter-webrtc#2206 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
Component: GLib
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
brave/brave-browser#59300 ·
-
Mute ydb/tests/functional/dstool/test_canonical_requests.py.Test.test_group_take_snapshot in main Apertaai_reviewed
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
ydb-platform/ydb#53974 · 3 commenti ·