任意の座標,オフセットの球面を3次元描画したい
25 views (last 30 days)
Show older comments
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);
どのようにすれば正しく球面をプロットする事が可能でしょうか.また,この書き方にはどのような問題があるのでしょうか.
宜しくお願いします.
0 Comments
Accepted Answer
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
More Answers (0)
See Also
Categories
Find more on 表面プロットとメッシュ プロット in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!