2013-03-28 14 views
5

Dies ist wahrscheinlich sehr grundlegende Matlab, also vergib mir. Ich benutze den Befehl sphere, um eine 3D-Kugel zu erstellen und die x,y,z Matrizen zu haben, die es mit Hilfe von Surf erzeugen. Zum Beispiel:projizieren Sie eine Kugel in ein Flugzeug mit Matlab

[x,y,z]=sphere(64); 

würde Ich mag (oder Summe) projizieren diese 3D-Kugel in eine der kartesischen 2D-Ebenen (zum Beispiel X-Y-Ebene), um eine 2D-Matrix zu erhalten, die die Projektion dieser Kugel ist. Mit imshow oder imagesc am Ausgang etwas sollte wie folgt aussehen:

enter image description here

einfache Summierung nicht funktioniert offensichtlich nicht, wie kann ich erreichen, dass in Matlab?

Antwort

1

Es ist möglich, dass ich Ihre Frage völlig falsch verstehe, in diesem Fall entschuldige ich mich; aber ich denke, dass eine der folgenden drei Methoden in der Tat sein kann, was Sie brauchen. Beachten Sie, dass Methode 3 ein Bild liefert, das dem von Ihnen bereitgestellten Beispiel sehr ähnlich sieht ... aber ich kam mit einer sehr unterschiedlichen Route (ohne den Befehl sphere überhaupt zu verwenden, aber "Voxel im Inneren" und "Voxel außerhalb" zu berechnen) direkt mit ihrer Entfernung von der Mitte). Ich habe das zweite Bild im Vergleich zum dritten umgedreht, da es auf diese Weise besser aussah - das Füllen der Kugel mit Nullen ließ es fast wie eine schwarze Scheibe aussehen.

enter image description here

%% method 1: find the coordinates, and histogram them 
[x y z]=sphere(200); 
xv = linspace(-1,1,40); 
[xh xc]=histc(x(:), xv); 
[yh yc]=histc(y(:), xv); 

% sum the occurrences of coordinates using sparse: 
sm = sparse(xc, yc, ones(size(xc))); 
sf = full(sm); 

figure; 
subplot(1,3,1); 
imagesc(sf); axis image; axis off 
caxis([0 sf(19,19)]) % add some clipping 
title 'projection of point density' 

%% method 2: fill a sphere and add its volume elements: 
xv = linspace(-1,1,100); 
[xx yy zz]=meshgrid(xv,xv,xv); 
rr = sqrt(xx.^2 + yy.^2 + zz.^2); 
vol = zeros(numel(xv)*[1 1 1]); 
vol(rr<1)=1; 
proj = sum(vol,3); 
subplot(1,3,2) 
imagesc(proj); axis image; axis off; colormap gray 
title 'projection of volume' 

%% method 3: visualize just a thin shell: 
vol2 = ones(numel(xv)*[1 1 1]); 
vol2(rr<1) = 0; 
vol2(rr<0.95)=1; 
projShell = sum(vol2,3); 
subplot(1,3,3); 
imagesc(projShell); axis image; axis off; colormap gray 
title 'projection of a shell' 
0

Sie können auf der XY-Ebene in Matlab Projekt mithilfe:

[x,y,z] = sphere(64); 
surf(x,y,zeros(size(z))); 

Aber ich denke, Sie sollten nicht dafür verwenden, Matlab, weil das Problem so einfach ist, dass Sie dies tun können, analytisch ...

+0

Ich bin nicht daran interessiert, die das Ergebnis Plotten, aber eine 2D-Matrix zu haben, die die Projektion der 3D-Kugel ist. Und wenn es so einfach ist, warum gibst du das nicht als Antwort? –

+0

Aber was meinst du mit 2D-Matrix, die die Projektion einer Kugel ist? Wie kann eine Matrix eine Projektion einer Kugel sein? Das macht keinen Sinn ... –

+0

Eine Kugel ist im Wesentlichen ein 3D-Objekt, eine Projektion ist ein 2D-Objekt. In Matlab werden 2D-Objekte durch eine Matrix dargestellt. Wenn ich 'imagesc' auf dieser Matrix verwende, erwarte ich, dass etwas wie das Bild kommt, das ich angehängt habe, wo es eine Ansammlung von Punkten (oder höheren Pixelwerten) entlang des" Rings "und viel weniger in der Mitte gibt. –

0

Ich würde Kartenprojektionen betrachten, die für diesen Zweck entworfen sind.

Eine Suche auf "Kartenprojektionen Matlab" ergibt Dokumentation auf einer Matlab mapping toolbox. Jedoch, wenn Sie wollen oder müssen Sie Ihre eigenen rollen, gibt es eine gute Zusammenfassung auf der USGS Website, sowie eine wikipedia Artikel.

+0

Tough die Map Toolbox scheint sehr nützlich, wieder wird es nicht eine 2D-Matrix dieser Projektion ausgeben, und es ist hauptsächlich für den Zweck der Anzeige. Auch die Projektion, an der ich interessiert bin, summiert alle Punkte der Kugel, die in ein Pixel in der 2D-Ebene fallen, während in der Karten-Toolbox (zum Beispiel vertikale Azimutal-Projektion) die Hälfte der Kugel fehlt es zeigt nur die relevante Hälfte des Globus. –

+0

Es gibt viele verschiedene Arten der Projektion. Einige können nur die Hälfte der Kugel zeigen, andere (wie Stereographische oder Mercator-Projektion) zeigen im Wesentlichen die gesamte Kugel.(Beachten Sie, dass es unmöglich ist, eine Kugel kontinuierlich auf eine Ebene ohne mindestens einen singulären Punkt abzubilden ...) – comingstorm

Verwandte Themen