Wie kann ich Punkte in Bereichen mit höherer Krümmung konzentrieren?


11

Wie kann ich Punkte auf einer impliziten Oberfläche verteilen, um sie in Bereichen mit höherer Krümmung dichter zu konzentrieren?

Ich habe überlegt, Punkte zufällig hinzuzufügen und Punkte abzulehnen, die aufgrund der Krümmung nicht erforderlich sind, aber ich würde gerne wissen, ob es einen besseren Ansatz gibt, um eine gleichmäßigere Verteilung über Bereiche mit ähnlicher Krümmung zu erzielen und gleichzeitig die in hoher Höhe erforderliche höhere Dichte zu erzielen Krümmungsbereiche.

Ich möchte diese Punkte speziell für eine Triangulation der Oberfläche verwenden und möchte nicht mehr Dreiecke erstellen, als ich für relativ flache Teile benötige.


Dies wird auf Formen mit einer bekannten Ableitung angewendet, damit die Krümmung an einem bestimmten Punkt berechnet werden kann.

Dies muss kein Echtzeitansatz sein.


Suchen Sie nach einer genaueren Methode, um Proben aus einer Distribution ohne Montecarlo-Test zu entnehmen? Wenn Sie sich nicht viel für den Rechenansatz interessieren (dh Sie suchen eher nach einem genauen Ansatz als nach dem Rechenaufwand), könnte ich eine Lösung haben, die aber natürlich optimiert werden könnte.
user8469759

3
Kennen Sie die analytische Funktion oder können Sie sie nur testen? Kennen Sie das analytische Derivat?
Julien Guertault

@ JulienGuertault Klärt meine Bearbeitung?
Trichoplax

@Lukkio Ich möchte zuerst Genauigkeit, dann kann die Optimierung später erfolgen, sobald der Ansatz funktioniert.
Trichoplax

1
Vielleicht möchten Sie einen Blick auf Finite-Elemente-Methoden werfen , die ebenfalls Triangulation (oder allgemeiner: Vereinfachungen) verwenden und häufig das Problem haben, in ausgewählten Regionen eine höhere Abtastdichte zu benötigen. Sie müssen dafür Algorithmen entwickelt haben.
Wrzlprmft

Antworten:


11

Die Idee, die ich anwenden möchte, wäre die folgende: Ich mache das Beispiel für die Kurve, aber es sollte für die Anwendung für die Oberfläche einfach sein.

Nehmen wir an, wir haben eine Kurve gleichmäßig parametrisiert ist. Angenommen, der Parameter der Kurve ist s . Ihr Ziel ist es, einen Punkt abzutasten, der dem Wert von s entspricht, so dass die Krümmung hoch ist.γss

Wenn Sie die Größe der Krümmung , ist dies auch eine Funktion von s . Also, wenn Sie die Funktion | normalisieren c | erhalten Sie eine Wahrscheinlichkeitsverteilung. Wenn Sie das Integral einer solchen Verteilung erhalten, erhalten Sie die kumulative Verteilung. Nennen wir diese kumulative Funktion C ( s ) .cs|c|C.(s)

Das Stichprobenproblem aus einer Verteilung, die durch die kumulative Funktion gegeben ist, ist allgemein bekannt. Wenn Sie also einen Satz von Werten abgetastet haben , wird dieser Wert mit den interessierenden Punkten in Beziehung gesetzt.s0,s1,,sn

Die Anwendung dieser Methode auf den Fall der Oberfläche sollte gerade sein, da Sie im Grunde eine zweidimensionale kumulative Verteilungsfunktion haben, das Stichprobenproblem jedoch genau das gleiche ist.

Um nur einige Details zu nennen, handelt es sich im Grunde genommen um eine Stichprobe aus einer Verteilung, da die kumulative Funktion zwei Schritte umfasst:

  1. Nehmen Sie einen zufälligen Wert im Intervall , sagen wir k[0,1]k

  2. Löse die Gleichung .C(s)=k

Dieser Ansatz ist genau, natürlich teuer, aber wenn Sie einen solchen Ansatz mögen, können Sie an der Optimierung arbeiten.


1
Noch keine Latexunterstützung.
Jojaja

Ich suchte nach etwas, das mit einer impliziten Oberfläche verwendet werden kann, auch wenn sie keine Parametrisierung hat. Ist es immer möglich, eine implizite Oberfläche zu parametrisieren, wenn die Ableitung bekannt ist?
Trichoplax

Alle Fragen, die von MathJax für Formeln profitieren würden, können zu dieser Meta-Antwort hinzugefügt werden , um unsere Chancen auf MathJax zu erhöhen. (Dieser wurde bereits hinzugefügt.)
Trichoplax

Denken Sie daran, dass Sie die aus der Krümmung abgeleitete Verteilungsfunktion benötigen. Sie sagten, Sie können alles ableiten (übrigens, welche Art von Oberfläche haben Sie? Dh die Gleichung). Wie auch immer ... was meinst du mit "Derivat bekannt"? Kennen Sie eine explizite Formel der Ableitung? oder ist es auch implizit? (dh mittels Differentialgleichung beschrieben)?
user8469759

1
Übrigens ... wenn die Kurve / Oberfläche algebrisch ist (ich meine ausgedrückt durch Polynom oder rationales Personal), gibt es Berechnungsmethoden, die auf bspline / nurbs basieren und erklären, wie solche Kurven parametrisiert werden. Ich habe hier einen Blick darauf geworfen docs.lib.purdue.edu/cgi/… , weitere Methoden (auch fortgeschrittene) finden Sie in einem meiner Lieblingsbücher über Nurbs (Das NURBS-Buch von Tiller).
user8469759

3

Ein guter Ausgangspunkt ist das in SIGGRAPH 1994 veröffentlichte klassische Papier Verwenden von Partikeln zur Probenahme und Kontrolle impliziter Oberflächen .

Eine einfache Partikelsimulation, die in der Arbeit Sampling impliziter Objekte mit physikalisch basierten Partikelsystemen ( Computers & Graphics , 1996) für Kurven beschrieben wurde, funktioniert auch für Oberflächen. Beispiele finden Sie unter Dynamische Textur für implizite Oberflächen .

Ein neueres Beispiel finden Sie unter Form- und Tondarstellung für implizite Oberflächen ( Computers & Graphics , 2011).


2

Der folgende naive Ansatz wird wahrscheinlich nicht so gut verteilte Punkte liefern wie die von Lhf angegebenen , aber es sollte viel einfacher zu implementieren und rechnerisch schneller sein:

Für zwei Punkte x und y Lassen d(x,y) bezeichnen die durchschnittliche Entfernung, die Sie Punkte mit der durchschnittlichen Krümmung von möchten x und y zB eine Konstante multipliziert mit der Umkehrung der durchschnittlichen Krümmung von zu haben x und y.

Bauen Sie nun Ihre Punktesammlung auf EIN nacheinander:

  1. Wählen Sie einen zufälligen Punkt x und fügen Sie zwei Punkte hinzu, sodass alle drei Punkte ein gleichseitiges Dreieck mit Kantenlänge bilden d(x,x).

  2. Addiere alle Punkte zu EIN und markieren Sie sie als benachbart.

  3. Führen Sie die folgenden Schritte wiederholt aus, bis keine Nachbarschaften mehr vorhanden sind EIN nicht mehr:

    1. Wählen Sie zwei benachbarte Punkte aus x und y von EIN. Markieren Sie sie als nicht benachbart.
    2. Consider a point z that has a distance of d(x,y) from both these points. Of the two possible such points select the one pointing outwards of A (this needs some work, but should be straightforward).
    3. Check whether z is closer than d(x,y) to any point from A that is still adjacent to another point.

      • if yes, discard it.
      • if no, mark x and z as well as y and z as adjacent and add z to A.

At the end, A should be a collection of points matching your criteria. You sort-of just created a triangulation but it may be pathological and thus you should probably triangulate the points afresh.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.