2013-03-28 55 views
5

これはおそらく非常に基本的なmatlabなので、私を許してください。 コマンドsphereを使用して3D球を作成し、surfを使用してそれを生成する行列をx,y,zにします。例えば:直交2次元平面(例えばX-Y平面)の1つに私はプロジェクト(または合計)したいmatlabを使って球面を投影する

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

この3D球体は、球体の投影となり2D行列を得ることができます。出力にimshowまたはimagescを使用すると、次のようなものになります。

enter image description here

簡単な加算を明らかに私は、MATLABでそれを達成できるか、動作しませんか?

答えて

1

私はあなたの質問を完全に誤解している可能性があります。その場合はお詫びします。しかし、私は次の3つの方法のうちの1つが実際にあなたが必要とするものかもしれないと思います。メソッド3は、あなたが提供した例のように見えるイメージを提供しますが、私は非常に別のルートを使用しています(sphereコマンドを使用せず、「内側のボクセル」と「外側のボクセル」を計算するセンターからの距離がある場合は直接)。私は2番目のイメージを3番目のイメージに反転しました。それはそれがより良く見えたからです。球体をゼロで塗りつぶすと、ほぼ黒いディスクのように見えました。

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

あなたが使用することにより、MATLABでXY平面上に投影することができ:

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

をしかし、問題は、あなたが解析的にこれを行うことができますので、簡単ですので、私は、あなたがこのためにMATLABを使用してはならないと思う...

+0

Iは、プロット結果に興味がないんだけど、3D球体の投影である2D行列を有すること。それがとてもシンプルなのであれば、なぜあなたはそれを答えにしませんか? –

+0

しかし、球の投影である2D行列ではどういう意味ですか?行列はどのようにして球の投影になりますか?それは意味をなさない... –

+0

球は本質的に3Dオブジェクトであり、投影は2Dオブジェクトです。 Matlabの2Dオブジェクトは行列で表されます。その行列上で 'imagesc'を使うと、添付した画像のようなものが得られることが期待されます。そこには、"リング "に沿ってポイント(またはより高いピクセル値)が蓄積され、真ん中にはずっと少なくなります。 –

0

私はこの目的のために設計された地図投影を見ていきます。

「マップ投影法」の検索では、Matlab mapping toolboxのドキュメントが作成されます。しかし、あなたが自分のロールを作りたいと思っているのであれば、USGSのウェブサイトとwikipediaの記事の良いサマリーがあります。

+0

地図のツールボックスは非常に便利ですが、再びその投影の2Dマトリックスを出力せず、主に表示の目的です。また、私が興味を持っているプロジェクションは、2D平面のピクセルに入る球のすべての点を合計しますが、マップツールボックス(たとえば、垂直方向の円錐投影法を見てください)では球の半分が欠けていますそれは地球儀の関連する半分だけを示しています。 –

+0

投影にはさまざまな種類があります。球体の半分しか表示できないものもあれば、StereographicやMercatorのようなものも本質的にすべての球体を表示するものもあります。(球を少なくとも1つの特異点なしで連続的に平面にマッピングすることは不可能であることに注意してください) – comingstorm

関連する問題