半球に測定値をプロットして色で変化を見る方法

1 view (last 30 days)
KAWAHARA HIDETO
KAWAHARA HIDETO on 14 Apr 2018
Commented: mizuki on 19 Apr 2018
測定値は(X,Y,Z,測定値)として10か所もっています。 sphereを使用して半球座標を得ることは出来ましたが、測定値をプロットする方法が分かりません。 よろしくお願いします。 現状は以下のようになっています。
if true
% code
[x1,y1,z1]=sphere;
x1=x1(11:end,:);
y1=y1(11:end,:);
z1=z1(11:end,:);
r=1;
figure
C=[-0.99*x1/r 0*y1/r 0.15*z1/r *0.666591
0.5*x1/r -0.86*y1/r 0.15*z1/r *0.6635891
0.5*x1/r 0.86*y1/r 0.15*z1/r *0.6668098
-0.45*x1/r 0.77*y1/r 0.45*z1/r *0.6683663
-0.45*x1/r -0.77*y1/r 0.45*z1/r *0.6712117
0.89*x1/r 0*y1/r 0.45*z1/r *0.6660206
0.33*x1/r 0.57*y1/r 0.*z1/r *0.6765934
-0.66*x1/r 0*y1/r 0.75*z1/r *0.6733946
0.33*x1/r -0.57*y1/r 0.75*z1/r *0.6850352
0*x1/r 0*y1/r 1*z1/r *0.7396369];
sf=surf(C);
colorbar
end
  2 Comments
mizuki
mizuki on 17 Apr 2018
Edited: mizuki on 17 Apr 2018
現在、
  • X, Y, Z -> x1, y1, z1
  • C -> 色情報&値
のようですが、「測定値」はどの変数にあたりますでしょうか。(Cであれば描画できているのではないでしょうか。)
また、以下のような SURF plot が得られていますが、この図では問題があり、どうなれば求めている結果になりますでしょうか。
KAWAHARA HIDETO
KAWAHARA HIDETO on 17 Apr 2018
回答ありがとうございます。
測定値はCです。
半球座標に測定値をプロットして、Z軸の高低ではなく色で数値の高低を見たいと思っています。

Sign in to comment.

Answers (1)

Etsuo Maeda
Etsuo Maeda on 17 Apr 2018

mizukiさんの書かれているように、もう少し何が何であるのかという説明があれば、回答を得やすくなります。

例えば、

1. 測定値を数値としてp1 = [10, 98, 23] のように記述しておく

2. 記述したコードに何をしようとしたものかのコメントを付ける

3. 何をしたいのかを明確に記述する

など、回答者に問題を理解してもらうために質問内容のリファインをしたほうがよさそうです。

かなり行間を読む努力をすると、

a. (半球上にあるはずの)XYZの直交座標上のデータをXYZ直交座標上にプロットしたい

b. 半球と測定値を重ね書きしたい

c. 三次元直交座標を三次元極座標に変換したい

のうちの何れか、もしくはその組み合わせのように思われますが、どうでしょうか?

参考として、球座標と散布プロットの重ね書きのサンプルは下記のようになります。

[X, Y, Z] = sphere; % 球座標を生成
surf(X, Y, Z, 'FaceColor', 'black', 'FaceAlpha', '0.1');
hold on; % 重ね書き有効
k = randi(21*21, 1); % 球座標上からランダムに1点を抜き出すためのkを生成
scatter3(X(k), Y(k), Z(k), 100, 'MarkerFaceColor', 'red'); 
hold off; % 重ね書き無効
  2 Comments
KAWAHARA HIDETO
KAWAHARA HIDETO on 17 Apr 2018
回答ありがとうございます。
a.とb.の組み合わせだと思います。
コメントを追加してみました。
d
[x1,y1,z1]=sphere;
x1=x1(11:end,:);
y1=y1(11:end,:);
z1=z1(11:end,:);
r=1; %半径1の半球座標を生成
figure
C=[-0.99*x1/r 0*y1/r 0.15*z1/r *0.666591
0.5*x1/r -0.86*y1/r 0.15*z1/r *0.6635891
0.5*x1/r 0.86*y1/r 0.15*z1/r *0.6668098
-0.45*x1/r 0.77*y1/r 0.45*z1/r *0.6683663
-0.45*x1/r -0.77*y1/r 0.45*z1/r *0.6712117
0.89*x1/r 0*y1/r 0.45*z1/r *0.6660206
0.33*x1/r 0.57*y1/r 0.*z1/r *0.6765934
-0.66*x1/r 0*y1/r 0.75*z1/r *0.6733946
0.33*x1/r -0.57*y1/r 0.75*z1/r *0.6850352
0*x1/r 0*y1/r 1*z1/r *0.7396369];%(X,Y,Z,測定値)を配列に格納?
sf=surf(C);%Cに入っている球状座標の(X,Y,Z)を指定して測定値を入れて色で高低差を見たい
colorbar
mizuki
mizuki on 19 Apr 2018

C のサイズは [110 63] のようでして、想定されているような C が作成できていないのではないかと思いますがいかがでしょうか。

>> size(C)

なお、SURF に色を付けたい場合、入力引数はCのみではなく最低でも二つ必要です。(描画したい値と色の変数) 詳しい使用方法は以下のドキュメントをご参考にしてください。

https://jp.mathworks.com/help/matlab/ref/surf.html

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!