Spline-Oberflächeninterpolation

8

Nehmen wir an, ich habe n Punkte, die eine Fläche auf der Z-Achse definieren

%Vor%

Ich möchte jetzt f (x, y) approximieren können. Ich suche nach einem Algorithmus für eine lineare und insbesondere eine Spline-Approximation. Ein Beispiel Algorithmen oder zumindest einige Zeiger wären großartig.

    
tcurdt 11.03.2012, 15:51
quelle

3 Antworten

4

Dies ist eine vage Beschreibung eines Ansatzes für eine lineare Annäherung.

  1. Ermitteln Sie das Voronoi-Diagramm Ihrer Punkte (für jeden Punkt in der Ebene finden Sie das nächste (x_i,y_i) )
  2. Nimm die Doppelfunktion, um die Delaunay-Triangulation zu erhalten: verbinde (x_i,y_i) und (x_j,y_j) , wenn es eine gibt Liniensegment von Punkten, so dass (x_i,y_i) und (x_j,y_j) äquidistant sind (und näher als jedes andere Paar).
  3. Finde auf jedem Dreieck die Ebene durch die drei Ecken. Dies ist die lineare Interpolation, die Sie benötigen.

Im Folgenden werden die ersten beiden Schritte in Python implementiert. Die Regelmäßigkeit deines Raster kann Ihnen erlauben, Dinge zu beschleunigen (es kann auch die Triangulation durcheinander bringen).

%Vor%     
Teepeemm 05.05.2014 21:43
quelle
2

Die Interpolation auf irreguläre 2D-Daten ist nicht so einfach. Ich kenne keine echte Spline-Verallgemeinerung zu irregulärem 2D.

Neben den triangulationsbasierten Ansätzen können Sie auch Barnes ( Ссылка ) und Inverse Distance Weighting (< a href="http://en.wikipedia.org/wiki/Inverse_distance_weighting"> Ссылка ), oder allgemeiner RBF ( Ссылка ).

Wenn Ihr Punkt stark ungleichmäßig verteilt ist (dichte Cluster), kann es notwendig sein, die Größe der Funktionen adaptiv zu machen, oder eher auf Approximation als auf Interpolation zurückzugreifen.

    
Yves Daoust 06.05.2014 08:26
quelle
1

Sie können Ihre Punkte als Kontrollpunkte einer Bézier (oder Bspline) -Oberfläche verwenden, besonders wenn (xi, yi) ein Rechteck in der XY -Ebene abtastet. In dieser Hinsicht ist keine Anpassung beteiligt.

Die Oberfläche, die Sie erhalten, befindet sich in der konvexen Hülle Ihrer Punkte und schneidet (interpoliert) die Punkte an der Grenze von {xi, yi} .

Wenn Sie experimentieren möchten, Dieser Forenbeitrag scheint einfach zu sein Code in Matlab , und Sie können GuIRIT verwenden, um dasselbe zu tun, wenn Sie dies nicht tun Habe Matlab (obwohl es das Dateiformat des Programms herausfinden muss).

    
user1071136 11.03.2012 17:36
quelle

Tags und Links