MATLAB contourf-plot für eine unregelmäßige domain
Ich komme bei diesem problem für eine lange Zeit jetzt. Ich habe eine polygonale region (sagen wir, ein Sechseck). Ich kann berechnen Sie die Werte der bestimmten Funktion an einem beliebigen Punkt innerhalb des Polygons. Jetzt brauche ich zum erstellen einer Kontur gefüllt (mit contourf in MATLAB) dieser Daten. Wie mache ich es. Ich fand einige Diskussionen zu diesem Thema unter dem folgenden link (Seite 121)
http://www-personal.umich.edu/~jpboyd/eng403_chap4_contourplts.pdf
Dieser funktioniert einigermaßen ok, aber es produziert immer noch scharfe Kanten, die ich nicht will. Wer hat eine Anregung zu diesem problem? Danke. Hier ist mein code
close all
Node = [ 1.0 0
0.5 0.8660
-0.5 0.8660
-1.0 0
-0.5 -0.8660
0.5 -0.8660];
[x,y] = meshgrid(-1:0.1:1,-1:0.1:1);
N = zeros(size(x));
for i=1:size(x,2)
for j=1:size(y,2)
p = [x(i,j) y(i,j)];
IN = inpolygon(p(1),p(2),Node(:,1),Node(:,2));
if IN
N(i,j)= rand;
else
N(i,j)= NaN;
end
end
end
figure
contourf(x,y,N,'LineStyle','none'), hold on;
xlabel('X'), ylabel('Y'), axis equal; axis off; colorbar;
line([Node(:,1);Node(1,1)],[Node(:,2);Node(1,2)],'Color',[1 1 1],'LineWidth',2.0)
clear IN i j p x y
- Können wir den code sehen, und einige der Daten, mit der Sie arbeiten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist mit einem quadratischen raster, um die Probe eine hexagonale Fläche. Dies wird in der Tat führen zu Grenze Probleme.
Eine bessere Lösung (aber noch nicht ganz optimal) ist die Verwendung eines hexagonal grid:
Wenn Sie möchten, sogar eine bessere Abdeckung haben, müssen Sie entwickeln ein raster, das besser deckt Ihre Fläche und/oder die Anzahl der sample-Punkte.
Für beliebige unregelmäßige Bereiche, möchten Sie vielleicht zu Experimentieren mit unregelmäßigen/zufälligen raster, verteilt, so dass es mehr Punkte in der Nähe der Grenzen, als es in der Mitte der Fläche.
Angenommen, Sie haben eine Funktion definiert, die auf einem Sechseck. Dann nimm doch mal Platz, enthält das Sechseck.
Einen einfachen ersten test, wäre die Ausweitung Ihrer Funktion auf dem Platz zu nehmen, der Wert = 0, für Punkte außerhalb des Sechsecks.
Je nach Umfang Ihrer Funktion, dies kann oder kann nicht, Sie geben eine gute Antwort.
Wenn das nicht funktioniert, dann finden Sie die min-Funktion auf die Sechseck mit
min(min(A)))
für eine nxn-matrix A. bestimmen Sie Dann die Funktionmin(min(A)) - 1.0
außerhalb des Sechsecks, aber auf dem Platz.Dann verwenden
contourf(x, y, z, v)
wobei v ein Vektor, der die Werte für den Ausgang, so nehmen Siev(1) = min(min(A)) - 1.0
, undv(2:n) = linspace(min(min(A)), max(max(A)), n)
für einige ganze Zahl n ist. Wahrscheinlich können Sie die Farbe festlegen, die von der level-set -min(min(A)) - 1.0
weiß, aber ich habe das noch nie getan. Ich habe etwas zu tun, wie dies vor, und Einstellung der Funktion = 0, die außerhalb der er-Sechskant genug war.Wenn Ihre Funktion kann nur ausgewertet werden innen die polygonale region, dann meine hexagonale raster Antwort steht immer noch. Allerdings, wenn Sie Ihre Funktion werden (oder geändert werden) ausgewertet außerhalb das polygon, die Sie möglicherweise verwenden möchten, ein cheat:
Es im Grunde schafft Ihr contour plot, der auf einer quadratischen region, und überlagert eine Maske mit einem sechseckigen Loch in der Mitte, so dass es sieht aus wie es ist nur eine Kontur der hexagonal. Ich vermute, es ist viel einfacher, zu optimieren Ihrer Funktion zu ermöglichen Funktion Auswertungen außerhalb der region, dann ist es (wieder-)erfinden Sie eine Art raster mit den Grenzen.