任意の座標,オフセットの球面を3次元描画したい

28 visualizaciones (últimos 30 días)
桃大 多田
桃大 多田 el 24 de Jun. de 2022
Comentada: 桃大 多田 el 24 de Jun. de 2022
MATLABは最近使い始めました.
3次元プロットのグラフがあり,それに補助的に3次元球面を追加する形で描画したいと考えています.
そこで,以下のように記述して動かしてみたところ,想定通りのプロットにならず,困っています.
r=1.5;
a=10;
b=10;
c=10;
[x,y,z]=sphere;
sphr=@(a,b,c,x,y,z) [x*r+a,y*r+b,z*r+c];
surf(sphr(a,b,c,x,y,z));
これを実行したところ,平たい波のようなプロットが追加され,球とは呼べるものではありませんでした.
また,特に差はないだろうと思いつつも以下のように変更して動作させてみたところ,「等号の右辺からの出力数は代入を満たすには不十分です。」という警告が出ました.
r=1.5;
a=10;
b=10;
c=10;
[x,y,z]=sphere;
sphr=@(a,b,c,x,y,z) [x*r+a,y*r+b,z*r+c];
[x2,y2,z2]=sphr(a,b,c,x,y,z);
surf(x2,y2,z2);
どのようにすれば正しく球面をプロットする事が可能でしょうか.また,この書き方にはどのような問題があるのでしょうか.
宜しくお願いします.

Respuesta aceptada

Hernia Baby
Hernia Baby el 24 de Jun. de 2022
Editada: Hernia Baby el 24 de Jun. de 2022
1つめのコードでうまくいかない理由としては出力が21×63のサイズになっている点です。
つまり、21×21のサイズである変数 X, Y, Z が1つの変数になっている事が問題です。
2つめのコードでうまくいかないのは無名関数の出力は1つだからです。
-------------------------
以下のように関数を最後に書くことをオススメします。
r=1.5;
a=10;
b=10;
c=10;
[x,y,z]=Mysphr(a,b,c,r);
surf(x,y,z)
axis equal
関数は例題とほぼ変えてません。
function [X1,Y1,Z1] = Mysphr(x1,y1,z1,r,n)
% nの指定がない場合は20を規定とする
if nargin == 4
n = 20;
end
[x,y,z]=sphere(n);
X1 = x*r + x1;
Y1 = y*r + y1;
Z1 = z*r + z1;
end
  1 comentario
桃大 多田
桃大 多田 el 24 de Jun. de 2022
無事解決できました.ありがとうございます!

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Productos


Versión

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!