2010-05-17 2 views
7

ich weiß, ich kann, indem Sie eine 3D-Oberflächendarstellung in MATLAB erstellen:Wie erstelle ich ein Surfplot in MATLAB mit unregelmäßig verteilten Daten?

x = linspace(1,10,100); 
y = linspace(10,20,100); 

[X Y] = meshgrid(x,y); 

Z = X * Y; 

surf(X,Y,Z); 

Aber dies setzt voraus, dass alle Knoten für die Höhenkarte erzeugt Zeile nach oben. Ich habe eine Reihe von Daten mit beliebigen Punkten (x, y) und einer Höhe (z). Gibt es eine einfache Möglichkeit, einen Graphen zu zeichnen, der ähnlich wie surf eine Fläche zwischen den Punkten erzeugt?

Antwort

9

appologies nach einiger Jagd gelang es mir, meine eigene Frage zu beantworten:

Sie die trisurf Funktion verwenden können:

tri = delaunay(x,y); 
trisurf(tri,x,y,z); 

Wenn Sie dichte Daten haben möchten Sie shading interp (oder einen anderen Wert zu tun , überprüfen Sie doc shading), damit Sie keinen schwarzen Fleck wegen des Rasters erhalten.

+2

Eigentlich ist der beste Weg, um den schwarzen Fleck zu vermeiden, die Eigenschaft 'edgeColor' auf' none' zu ​​setzen. – Jonas

3

Es scheint, als ob Sie Ihre Antwort gefunden haben, indem Sie DELAUNAY und TRISURF zum Generieren und Plotten einer triangulierten Oberfläche verwenden.

Alternativ können Sie auch ein Gitter mit regelmäßigem Abstand zu Ihren nicht gleichmäßig verteilten Punkten einfügen, um eine Fläche zu erzeugen, die mit dem Befehl SURF gezeichnet werden kann. Ich erörtern, wie dies unter Verwendung der TriScatteredInterp class (oder der veralteten Funktion GRIDDATA) in my answer bis this other question on SO getan werden kann.