Algorithmus für die 2D-Interpolation

8

Ich habe zwei Formen, die Querschnitte eines Kanals sind. Ich möchte den Querschnitt eines Zwischenpunkts zwischen den beiden definierten Punkten berechnen. Was ist der einfachste (relativ einfache?) Algorithmus in dieser Situation?

P.S .: Ich bin auf verschiedene Algorithmen wie Natural Neighbor und Poisson gestoßen, die komplex erschienen. Ich suche eine einfache Lösung, die schnell umgesetzt werden kann.

EDIT: Ich entfernte das Wort "Simplest" aus dem Titel, da es irreführend sein könnte

    
Gayan 16.03.2010, 08:18
quelle

3 Antworten

3

Das ist einfach:

  1. Zeichnen Sie in jedem Querschnitt N Punkte in gleichmäßigen Abständen entlang der Grenze des Querschnitts.
  2. Zeichnen Sie gerade Linien vom n-ten Punkt im Querschnitt 1 bis zum n-ten Punkt im Querschnitt 2.
  3. Entfernen Sie Ihren neuen Querschnitt in der gewünschten Entfernung zwischen den alten Querschnitten.

Einfacher noch:

  1. Verwenden Sie einen der vorhandenen Querschnitte ohne Änderungen.

Dieser zweite Vorschlag könnte zu einfach sein, nehme ich an, aber ich wette, niemand schlägt einen einfacheren vor!

EDIT folgenden OP-Kommentar: (zu viel für einen erneuten Kommentar)

Nun, Sie haben nach einer einfachen Methode gefragt! Ich bin mir nicht sicher, ob ich das gleiche Problem mit der ersten Methode sehe wie du. Wenn die Querschnitte nicht zu komisch sind (wahrscheinlich am besten, wenn sie konvexe Polygone sind) und Sie nichts Ungewöhnliches tun, wie die linke Seite eines Querschnitts zur rechten Seite des anderen abzubilden (wodurch viele kreuzende Linien erzwungen werden) ) dann sollte die Methode einen sinnvollen Querschnitt ergeben. Für den Fall, dass Sie ein Dreieck und ein Rechteck vorschlagen, nehmen Sie an, dass das Dreieck auf seiner Basis sitzt, ein Scheitelpunkt oben. Ordnen Sie diesen Punkt beispielsweise der linken oberen Ecke des Rechtecks ​​zu, und fahren Sie dann in der gleichen Richtung (im oder gegen den Uhrzeigersinn) um die Grenzen der beiden Querschnitte herum, die die entsprechenden Punkte verbinden. Ich sehe keine sich kreuzenden Linien, und in jedem Abstand zwischen den beiden Querschnitten sehe ich eine wohldefinierte Form.

    
High Performance Mark 16.03.2010, 08:24
quelle
1

Beachten Sie, dass es einige Unklarheiten bezüglich der Antworten von High Performance Mark gibt, die Sie wahrscheinlich ansprechen müssen, um die Qualität der Ausgabe seiner Methode zu definieren. Die wichtigste ist, wenn Sie die n -Punkte auf beide Querschnitte zeichnen, welche Art von Korrespondenz bestimmen Sie zwischen ihnen, das heißt, wenn Sie es so machen High Performance Mark vorgeschlagen, dann die Reihenfolge der Kennzeichnung der Punkte wird wichtig.

Ich schlage eine rotierende (orthogonale) Ebene gleichzeitig durch beide Querschnitte vor, dann muss die Menge der Punkte, die diese Ebene auf einem Querschnitt schneiden, nur an die Menge der Punkte angepasst werden, die diese Ebene auf dem anderen Querschnitt schneiden. Hypothetisch gibt es keine Begrenzung für die Anzahl der Punkte in diesen Mengen, aber es reduziert sicherlich die Komplexität des Korrespondenzproblems in der ursprünglichen Situation.

    
ldog 16.03.2010 16:15
quelle
1

Hier ist ein weiterer Versuch für das Problem, was ich denke, ist ein viel besserer Versuch.

Gegeben die beiden Querschnitte C_1 , C_2

Platziere jedes C_i in ein globales Referenzframe mit dem Koordinatensystem (x,y) , so dass die Art ihrer relativen Lage sinnvoll ist. Teilen Sie jede C_i in eine obere und untere Kurve U_i und L_i . Die Idee wird sein, dass Sie die Kurve U_1 bis U_2 und L_1 bis L_2 kontinuierlich verformen möchten. (Beachten Sie, dass Sie diese Methode so erweitern können, dass jede C_i in m -Kurven aufgeteilt wird, wenn Sie möchten.)

Der Weg dazu ist wie folgt. Geben Sie für jedes T_i = U_i, or L_i sample n -Punkte an und bestimmen Sie das interpolierende Polynom P{T_i}(x) . Wie im Folgenden angemerkt, sind interpolierende Polynome insbesondere an den Endpunkten oszillationsanfällig. Anstelle des Interpolationspolynoms kann stattdessen das Fitpolynom der kleinsten Quadrate verwendet werden, das viel robuster wäre. Definieren Sie dann die Verformung des Polynoms P{U_1}(x) = a_0 + a_1 * x + ... + a_n * x^n bis P{U_2}(x) = b_0 + b_1 * x + ... + b_n * x^n als Q{P{U_1},P{U_2}}(x, t) = ( t * a_0 + (1 - t ) b_0 ) + ... + (t * a_n + (1-t) * b_n ) * x^n , wobei die Verformung Q über 0<=t<=1 definiert wird, wobei t definiert, an welchem ​​Punkt die Verformung ist (dh bei t=0 wir sind bei U_2 und bei t=1 sind wir bei U_1 und bei jeder anderen t sind wir bei einer stetigen Verformung der beiden.) Das Gleiche gilt für Q{P{L_1},P{L_2}}(x, t) . Diese beiden Verformungen konstruieren Sie eine kontinuierliche Darstellung zwischen den beiden Querschnitten, die Sie bei jedem t abtasten können.

Zu beachten ist, dass die Koeffizienten der Interpolationspolynome der beiden Teile beider Querschnitte linear interpoliert werden. Beachten Sie auch, wenn Sie die Querschnitte teilen, sollten Sie wahrscheinlich die Einschränkung setzen, dass sie an den Endpunkten geteilt werden müssen, die übereinstimmen, andernfalls haben Sie vielleicht "Löcher" in Ihrer Deformation.

Ich hoffe, das ist klar.

edit: Das Problem der Oszillation in interpolierenden Polynomen wurde behoben.

    
ldog 16.03.2010 16:36
quelle