2013-03-28 25 views
5

Jest to prawdopodobnie bardzo podstawowy matlab, więc wybacz mi. Używam polecenia sphere, aby utworzyć kulę 3D i mieć macierze x,y,z, które będą produkować za pomocą surfowania. Nprzut kuli na płaszczyznę za pomocą matlab

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

Chciałbym Project (lub sumę) tej kuli 3D w jednej z płaszczyzn kartezjański 2D (na przykład X-Y), z wytworzeniem 2D matrycę, która będzie rzutem tej dziedzinie. Korzystanie imshow lub imagesc na wyjściu powinien wyglądać mniej więcej tak:

enter image description here

proste sumowanie oczywiście nie działa, w jaki sposób można tego dokonać w Matlab?

Odpowiedz

1

Możliwe, że zupełnie nie rozumiem twojego pytania, w którym to przypadku przepraszam; ale myślę, że jedna z następujących trzech metod może w rzeczywistości być tym, czego potrzebujesz. Zauważ, że metoda 3 daje obraz podobny do podanego przykładu ... ale dostałem się tam z zupełnie inną trasą (w ogóle nie używając polecenia sphere, ale przetwarzając "voxels inside" i "voxels outside" przez działanie bezpośrednio z ich odległością od centrum). Odwróciłem drugi obraz w porównaniu do trzeciego, ponieważ wyglądało to lepiej w ten sposób - wypełnienie sfery zerami sprawiło, że wyglądał prawie jak czarny dysk.

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

można rzutować na płaszczyźnie XY w Matlab używając:

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

Ale myślę, że nie powinno się używać Matlab dla tego, ponieważ problem jest tak prosty, można to zrobić analitycznie ...

+0

Nie jestem zainteresowany w wykreślenie wyniku, ale mieć 2D matrycy, która jest projekcja sfery 3D. A jeśli to takie proste, dlaczego nie dasz tego jako odpowiedzi? –

+0

Ale co masz na myśli mówiąc o matrycy 2D, która jest projekcją kuli? W jaki sposób matryca może być projekcją kuli? To nie ma sensu ... –

+0

Kula jest w istocie obiektem 3D, projekcja jest obiektem 2D. w Matlab Obiekty 2D są reprezentowane przez macierz. Jeśli użyję 'imagesc' na tej macierzy, spodziewam się, że otrzymam obraz podobny do tego, który załączam, gdzie będzie gromadzenie punktów (lub wyższych wartości pikseli) wzdłuż" pierścienia ", a znacznie mniej w środku. –

0

Spojrzałbym na mapy, które są zaprojektowane do tego celu.

Wyszukiwanie w "map matlab map" daje dokumentację na Matlab mapping toolbox. Jednakże, jeśli chcesz lub musisz wykonać własne, istnieje dobre podsumowanie na stronie internetowej USGS, a także artykuł wikipedia.

+0

Tough przybornik mapy wydaje się bardzo przydatny, znowu, nie będzie wyprowadzał matrycy 2D tej projekcji, a to głównie w celu wyświetlania. Projekcja, która mnie interesuje, zsumuje wszystkie punkty kuli, które wpadają w piksel na płaszczyźnie 2D, podczas gdy w przyborniku mapy (patrząc na przykład na Azimuthal Projekcji w pionie), połowa kuli jest nieobecna pokazuje tylko odpowiednią połowę globu. –

+0

Istnieje wiele różnych rodzajów projekcji. Niektórzy mogą być w stanie pokazać tylko połowę kuli, ale inni (jak projekcja Stereographic lub Mercator) pokażą zasadniczo całą sferę.(zauważ, że niemożliwe jest ciągłe mapowanie kuli na płaszczyznę bez co najmniej jednego punktu ...) – comingstorm

Powiązane problemy