Interpolation eines Dreiecks

Ich habe eine Einheit rechtwinkliges Dreieck und einen Wert an jeder der 3 Ecken.
Ich muss interpolieren, um den Wert an einem Punkt im inneren des Dreiecks.
Stunden Suche haben sich bis nichts, das sagt mir sogar, wie Sie dies tun.
Hier ist mein bester Versuch, das ist eigentlich ziemlich nah dran aber nicht ganz richtig -

                result = 
                v1 * (1 - x) * (1 - y) +
                v2 * x * (1 - y) +
                v3 * x * y;

v1, v2 und v3 sind die Werte der 3 Ecken des Dreiecks.
(x, y) ist der Punkt in dem Dreieck, das Sie versuchen zu finden, den Wert von.

Jeder Art von Methode würde mir hier helfen. Es muss nicht unbedingt eine Einheit/rechtwinkliges Dreieck.

Aktualisierte info:
Ich habe ein raster mit gleichmäßig verteilten Punkte und einen Wert an jedem Punkt.
Ich mache ein Dreieck aus, die nächsten 3 Punkte auf dem raster.
Hier ist ein Bild, um es zu illustrieren -
Interpolation eines Dreiecks

So habe ich zum interpolieren zwischen 5, 3 und 7, um den Wert von x an.
Der Punkt könnte auch sein, innerhalb des anderen Dreiecks, das heißt, Sie würden interpolieren zwischen 5, 7, und der Wert der linken unteren Ecke des Quadrats.

In der code, den ich zeigte, v1 = 5, v2 = 3, v3 = 7.

x ist der Bruchteil der Entfernung (Reichweite [0-1]) in der "x" - Richtung und y die gebrochene Strecke in der "y" - Richtung.

Im Bild das Beispiel x wäre wahrscheinlich etwa 0,75 und y wäre etwa 0,2

Hier sind meine nächsten versuche -

Interpolation eines Dreiecks

Erstellt mit -

        if (x > y) //if x > y then the point is in the upper right triangle
            return
                v1 * (1 - x) * (1 - y) +
                v2 * x * (1 - y) +
                v3 * x * y;
        else //bottom left triangle
            return
                v1 * (1 - x) * (1 - y) +
                v4 * (1 - x) * y +
                v3 * x * y;

Und ein weiterer Versuch -

Interpolation eines Dreiecks

Erstellt mit -

if (x > y)
            return
                (1 - x) * v1 + (x - y) * v2 + y * v3;
        else
            return
                (1 - y) * v1 + (y - x) * v4 + x * v3;

Sind Sie sowohl in der Nähe, was ich brauche, aber offensichtlich nicht ganz richtig.

  • So, die vertex ist die? Zeigen Sie mir, wie Sie Ihr Koordinaten-system funktioniert, welchen Weg x und y gehen und wo v1, v2 und v3 sind.
  • Ok, ich aktualisiert einige info zu erzählen, was ich Tue ein bisschen mehr in die Tiefe.
  • Haben Sie eine bestimmte Auslegung-Methode im Sinn? Linear/bilinear/Nächster Nachbar?
  • Ich werde für linear/bilinear. Nächster Nachbar wird nicht funktionieren.
  • Tut Dreieck eigentlich Sache hier? Würde eine 4-Punkt-interpolation zu tun?
  • 4-Punkt ist die Bilineare interpolation, wie ich normalerweise tun, aber es sieht wie kann ich stark meine Geschwindigkeit zu verbessern durch die Verwendung von Dreiecken, anstatt. Ich in der Regel interpolieren zwischen v1 und v2, dann v3 und v4, dann interpolieren wieder zwischen diesen 2 neuen Werte für den endgültigen Wert. Ich möchte etwas ähnliches machen, aber mit einem Dreieck.
  • Das würde zeigen, Artefakte - ist das für Sie akzeptabel?
  • Artefakte sind in der Regel ok mit diesem, es sei denn, Sie sind zu groß
  • Als splitting jedes Quadrat in vier Dreiecke, die durch die Verwendung einer einzigen 4-Punkt-interpolation zu erhalten, der Wert in der Mitte, dann 4 Dreiecke (oben/Links/rechts/unten)?
  • Ich habe versucht, dass und mehrere andere Methoden. Ich habe versucht die Interpolation der Dreieck die Weise würde man ein simplex-Netz, und auch versucht, mit einer radialen Art der interpolation. Aber jede Methode hat eine Art Artefakt, das ist ein wenig zu stark.
  • Die bikubische interpolation ist dein Freund: docs.scipy.org/doc/scipy-0.14.0/reference/generated/...
  • Übrigens, es gibt keine "perfekte" oder "Artefakt-freie" Weg, um zu interpolieren. es ist sehr subjektiv, und variiert je nach Datensatz Sie sind Probenahme und der Lärm (wenn überhaupt) in den Messungen.

InformationsquelleAutor Frobot | 2012-01-02
Schreibe einen Kommentar