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

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

Accepted Answer

Hernia Baby
Hernia Baby on 24 Jun 2022
Edited: Hernia Baby on 24 Jun 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 Comment
桃大 多田
桃大 多田 on 24 Jun 2022
無事解決できました.ありがとうございます!

Sign in to comment.

More Answers (0)

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!