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

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);
どのようにすれば正しく球面をプロットする事が可能でしょうか.また,この書き方にはどのような問題があるのでしょうか.
宜しくお願いします.

 Risposta accettata

Hernia Baby
Hernia Baby il 24 Giu 2022
Modificato: Hernia Baby il 24 Giu 2022

1 voto

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 Commento

桃大 多田
桃大 多田 il 24 Giu 2022
無事解決できました.ありがとうございます!

Accedi per commentare.

Più risposte (0)

Prodotti

Release

R2022a

Community Treasure Hunt

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

Start Hunting!