2013-03-28 33 views
5

Bu muhtemelen çok basit bir matlab'dır, bu yüzden beni affet. 3D küre oluşturmak için sphere komutunu kullanıyorum ve sörf kullanarak üretecek x,y,z matrisini kullanıyorum. Örneğin:matlab kullanarak bir düzleme bir küre çizme

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

O kürenin çıkıntı olacak 2B matrisi elde etmek üzere (örneğin, X-Y düzlemi için) Kartezyen 2D düzlemleri birine 3D küre çıkıntı (veya toplam) istiyorum. nasıl Matlabda Bunu başarabilirsek,

enter image description here

basit toplama Açıkçası çalışmaz: Bu gibi görünmelidir çıkışına imshow veya imagesc kullanarak?

cevap

1

Sorunuzu tamamen yanlış anlamam mümkün olabilir, bu durumda özür dilerim; ama bence aşağıdaki üç yöntemden biri aslında ihtiyacınız olan şey olabilir. 3. yöntemde, sağladığınız örneğe çok benzeyen bir görüntü verdiğine dikkat edin ... ama çok farklı bir rotaya sahiptim (sphere komutunu kullanmamakla birlikte, ancak içerideki "vokseller" ve "vokseller" bilgisini kullanmadan) doğrudan merkezden uzaklığı ile). İkinci görüntüyü üçüncü tarafa göre tersine çevirdim çünkü daha iyi görünüyordu - küreyi sıfırlarla doldurmak neredeyse siyah bir diske benziyordu.

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

Sen kullanarak Matlab XY düzleminde yansıtabilirsiniz:

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

Ama asıl sorun, analitik yapabilirsiniz çok basit olduğu için, bunun için Matlab'i kullanmak gerektiğini düşünüyorum ...

+0

ben sonucunu komplo ilgilenmiyorum, ancak 3D kürenin projeksiyonu 2D matris olması. Ve eğer bu kadar basitse, neden bir cevap olarak vermiyorsun? –

+0

Peki bir kürenin izdüşümü olan 2D matris ile ne demek istiyorsun? Bir matris bir kürenin izdüşümü nasıl olabilir? Bu bir anlam ifade etmiyor ... –

+0

bir küre özünde bir 3D nesnesi, bir projeksiyon bir 2D nesnesidir. Matlab 2B nesneleri bir matris ile temsil edilir. Eğer bu matris üzerinde 'imagesc 'kullanırsam, iliştirdiğim görüntü gibi bir şey elde etmeyi umuyorum, burada" halka "boyunca noktaların (veya daha yüksek piksel değerlerinin) birikimi olacak ve ortada çok daha az olacaktır. –

0

Bu amaçla tasarlanan harita projeksiyonlarına bakarım.

"Harita projeksiyonları matlab" ile ilgili bir arama, bir Matlab mapping toolbox belgesindeki belgeleri verir. Ancak, kendinizinkini istiyorsanız ya da ihtiyaç duyuyorsanız, USGS web sitesinde ve bir wikipedia makalesinde iyi bir özet bulunmaktadır.

+0

Harita araç kutusu çok yararlı görünüyor, yine, bu projeksiyon bir 2D matris çıktı olmaz, ve esas olarak gösterim amacıyla içindir. Ayrıca, ilgilendiğim projeksiyon, 2D düzlemde bir piksele düşen kürenin tüm noktalarını toplayacaktır, oysa harita araç kutusunda (örneğin Dikey Perspektif Azimuthal Projeksiyonuna bakarak), kürenin yarısı kayıptır. sadece dünyanın ilgili yarısını gösterir. –

+0

Birçok farklı türde projeksiyon vardır. Bazıları sadece kürenin yarısını gösterebilir, ancak diğerleri (Stereografik veya Mercator projeksiyonu gibi) esas olarak tüm alanı gösterecektir.(Bir küre en az bir tekil nokta olmadan sürekli bir düzleme eşlemek imkansızdır ...) – comingstorm