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
Das ist einfach:
Einfacher noch:
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.
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.
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.
Tags und Links algorithm geometry interpolation coordinates