質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

1回答

650閲覧

【MATLAB】2次元行列を回転させることで3次元行列を作りたい

sasataka

総合スコア11

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2017/11/22 01:01

下記の様な51*51の行列を回転させて3次元の配列にすることで3次元の行列を作りたいのですが、その方法についてアドバイス頂けないでしょうか。よろしくお願いします。

以下2次元行列とその画像になります

MATLAB

1clear ; 2close all; 3 4 5rho=1000; 6Ae=1; 7t=1; 8v=1500; 9omega=2*pi*1000000; 10k=omega/v; 11r=0.1; 12 13x_start=-0.006; 14x_end=0.006; 15num_div=50; 16delta_x=(x_end-x_start)/num_div; 17x=x_start:delta_x:x_end; 18z_start=-0.006; 19z_end=0.006; 20delta_z=(z_end-z_start)/num_div; 21z=z_start:delta_z:z_end; 22[X,Z]=meshgrid(x,z); 23y=0; 24P1=0; 25for i=0:pi/120:pi/6 26 for j=0:pi/10:(2*pi-pi/10) 27 28 29 a=i; 30 b=j; 31 32 x1=r*cos(b)*sin(a); 33 y1=r*sin(b)*sin(a); 34 z1=r*cos(a); 35 deltaS=r^2*sin(a)*(pi/100)*(pi/10); 36 R=sqrt((X-x1).^2+(y-y1).^2+(Z-z1).^2); 37 P=(rho*Ae.*exp(1i*omega*t).*deltaS)./(2*pi.*R.*exp(1i*k*R)); 38 39 P1=P1+P; 40 41 end 42end 43 44P1=abs(P1); 45imagesc(x,z,P1) 46 47grid on

(730d894e87e7de05c0abc8502b0cdebf.png)

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WathMorks

2017/11/22 01:53

「回転して3次元配列」の意図するところが不明です。例えば、M=[1,2;3,4] をどのような配列にしたいのですか?
coco_bauer

2017/11/22 02:15

2次元配列をどのように回転させても3次元配列にはならない。それは、四角い板をどのように回転させても直方体にはならない事で明らか。 何がしたいのかを丁寧に説明してください。
sasataka

2017/11/22 04:59

上記で表されるP1の面をXY面とするとXZ面に回転させることで円筒状に出来ると思うのですが、円筒状に配列したいと考えています。また、その際に距離と配列のマスの数が合わなくなるのでこれをどのように辻褄を合わせるかについて悩んでいます。
guest

回答1

0

確かに、元の2次元の表(X-Y面上の矩形)をX軸を中心にして回転させると円筒ができます。
元の表の要素(矩形)は回転させることで円筒もしくはバームクーヘン状の立体になりますが、元の要素とそれにより作られた立体は1対1に対応しますから、数学的(トポロジカル)には等価です。

元の表は"X方向"と"Y方向"のインデックスによって要素が区別されるのに対して、円筒となった表は"X方向"と"X軸からの距離"のインデックスによって要素が区別されると見た目が違うので、別の配列になったように勘違いしたのではないでしょうか。

X軸を中心にした回転の角度(例えば90度(π/2))ごとに要素を区切れば、次元が増えたように思われるかもしれませんが、各要素の値は元の表のものなので、元の表をZ方向に4枚重ねたものと等価で、Z方向のインデックスによって要素の値が変わらない(値は"X方向"と"Y方向"のインデックスのみで決まる)から2次元の表と同じです。

こうしたことから、回転という操作を導入する意味はないものと思われます。

==
また、質問に「距離」という言葉が使われ、質問のコードには3次元空間の距離を求めていると思われる式が書かれています。

配列は、その配列の各次元のインデックスによって要素を指定できるデータ構造で、インデックスは整数に限られます。
例えば下記の2次元配列には、(0,0),(0,1),(1,0),(1,1)というインデックスしかありません(0.123, 3.1415)のような非整数のインデックスはありません)

[ [1, 2],
[3, 4]]

"3次元空間"の話と"3次元配列"の話が入り混じって、理解を妨げているように感じます。

もっと具体的に何がしたいのかを質問に書かれては如何かと思います。

.pngで終わる文字列が書かれていますが、リンクになっていません。
画像を示すのであれば、ちゃんとリンクにするか、URLを書いてください。

投稿2017/11/22 07:01

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問