5

これはおそらく非常に基本的な matlab であるため、ご容赦ください。コマンドsphereを使用して 3D 球体を作成し、x,y,zsurf を使用してそれを生成する行列を取得します。例えば:

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

この 3D 球体をデカルト 2D 平面 (XY 平面など) の 1 つに投影 (または合計) して、その球体の投影となる 2D マトリックスを取得したいと思います。imshow出力でorを使用するimagescと、次のようになります。

ここに画像の説明を入力

単純な合計は明らかに機能しません.Matlabでそれを達成するにはどうすればよいですか?

4

3 に答える 3

1

あなたの質問を完全に誤解している可能性があります。その場合はお詫び申し上げます。しかし、実際には次の 3 つの方法のいずれかが必要だと思います。方法 3 は、あなたが提供した例によく似た画像を提供することに注意してください...しかし、私は非常に異なるルートでそこにたどり着きました(sphereコマンドをまったく使用せず、直接作業して「内側のボクセル」と「外側のボクセル」を計算します)中心からの距離で)。3 番目の画像と比べて 2 番目の画像を反転させた方が見栄えが良いので、球をゼロで埋めると、ほとんど黒い円盤のように見えます。

ここに画像の説明を入力

%% 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'
于 2013-05-06T20:30:18.883 に答える
0

以下を使用して、Matlab の XY 平面に投影できます。

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

しかし、問題は非常に単純であるため、これを分析的に実行できるため、Matlab を使用するべきではないと思います...

于 2013-03-28T09:13:42.993 に答える
0

この目的のために設計された地図投影を調べます。

「map Projections matlab」で検索すると、Matlab マッピング ツールボックスに関するドキュメントが表示されます。ただし、自分で作成したい、または作成する必要がある場合は、USGSのWeb サイトに優れた概要とウィキペディアの記事があります。

于 2013-03-28T16:48:44.477 に答える