点のプロットの作成の方法

17 views (last 30 days)
Ryosuke KIJIMA
Ryosuke KIJIMA on 27 Jan 2020
Answered: Hiroumi Mita on 31 Jan 2020
上図のようなものを作成したいです。
作成の手順としては、
赤い点のプロット、点は上図のようになるように定数をプロット
点と点を線形補完で結ぶ
z軸上の黒い点からx軸に伸びる線を一定間隔で伸ばす
線と赤い点までの距離を求める
距離を求める赤い点の決定は、最近傍点を選出
プロットの部分から上手くできません。
途中まででもいいのでお助けください。

Accepted Answer

Hiroumi Mita
Hiroumi Mita on 27 Jan 2020
Edited: Hiroumi Mita on 27 Jan 2020
こんな感じでしょうか?
%紅い点の座標(適当な定数)
RED_x=[5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
RED_z=[1 1.2 1.3 1.4 1.7 1.8 2 2.1 2.3 2.1 1.8 1.7 1.4 1.3 1.2 ]
figure(1);plot(RED_x,RED_z,'ro')
hold on%上書き開始
for ii=1:length(RED_x)-1
%赤点間の線を結ぶ
line([RED_x(ii),RED_x(ii+1)],[RED_z(ii),RED_z(ii+1)])
end
hold off%上書き停止
KURO_DAI_x=0;%黒丸大のx座標
KURO_DAI_z=10;%黒丸大のz座標
KURO_SHO_x=[5:3:20]%黒丸小のx座標
KURO_SHO_z=zeros(1,15)%黒丸小のz座標
hold on%上書き開始
for ii=1:length(KURO_SHO_x)
%黒丸間の線を結ぶ
line([KURO_DAI_x,KURO_SHO_x(ii)],[KURO_DAI_z,KURO_SHO_z(ii)],'Color','black')
end
hold off%上書き停止

More Answers (5)

Ryosuke KIJIMA
Ryosuke KIJIMA on 27 Jan 2020
かなりイメージと近くなりました! ありがとうございます!
XとZの値を変えたく、数値を変更して動かしてみたところ、ベクトルは同じ長さ出なければならない。というエラーが出てしまいました。 どうすればよろしいでしょうか。
X=3 6 9 12 15 18 21 24 27 30 33 36 39 42 Z=100 120 150 180 210 240 270 240 210 180 150 120 100 Z軸上の点は(0,300) にしたいです。

Hiroumi Mita
Hiroumi Mita on 27 Jan 2020
XとZのベクトルの数を合わせましょう。数えると、Xは14個、Zは13個です。

Ryosuke KIJIMA
Ryosuke KIJIMA on 27 Jan 2020
Edited: Ryosuke KIJIMA on 27 Jan 2020
本当にありがとうございます。 イメージ通りの図を作ることができました。
Z軸上の大きい点と赤い点までの距離を出したい場合は、どうすればよろしいでしょうか。
赤い点の決定はz軸上の点から引かれた、一番近い点を選出したいです。
このようなコードで考えています。
%紅い点の座標(適当な定数 )
RED_x=[3 6 9 12 15 18 21 24 27 30 33 36 39]
RED_z=[100 105 115 130 155 175 190 175 155 130 115 105 100]
figure(1);plot(RED_x,RED_z,'ro')
hold on%上書き開始
for ii=1:length(RED_x)-1
%赤点間の線を結ぶ
line([RED_x(ii),RED_x(ii+1)],[RED_z(ii),RED_z(ii+1 )])
end
hold off%上書き停止
KURO_DAI_x=0;%黒丸大のx座標
KURO_DAI_z=1000;%黒丸大のz座標
KURO_SHO_x=[3:3:45]%黒丸小のx座標
KURO_SHO_z=zeros(1,15)%黒丸小のz座標
hold on%上書き開始
for ii=1:length(KURO_SHO_x )
%黒丸間の線を結ぶ
line([KURO_DAI_x,KURO_SHO_x(ii)],[KURO_DAI_z,KURO_SHO_z(ii)],'Color','black ')
end
hold off%上書き停止

Hiroumi Mita
Hiroumi Mita on 27 Jan 2020
あるA点(xa,za)とあるB点(xb,zb)の間の距離の公式は
L=sqrt( (xa-xb)^2 + (za-zb)^2 )
なので、これを応用しましょう。
>>Z軸上の大きい点と赤い点までの距離を出したい場合は、どうすればよろしいでしょうか。
  1 Comment
Ryosuke KIJIMA
Ryosuke KIJIMA on 27 Jan 2020
Edited: Ryosuke KIJIMA on 27 Jan 2020
ご回答ありがとうございます。
下の図で考えたとき、
一つの線分の差は上手くいったのですが、
すべての線分で距離の差を試してみましたが、上手くいきません。
原因を教えていただけますでしょうか。
また、図内の下の干渉模様も作成したいと考えています。
赤点までのそれぞれの距離の差を足し合わせて、
12cm(0.12m)サイクルで作成しようとしていますが、
方法が思いつきません。
%赤い点の座標(適当な定数 )
RED_x=zeros(13,1);
for k=1:point_num
RED_x(k)=Z+3*(k-1);
end
RED_z=[100;105;115;130;155;175;190;175;155;130;115;105;100];
figure(1);plot(RED_x,RED_z,'ro')
hold on%上書き開始
for ii=1:length(RED_x)-1
%赤点間の線を結ぶ
line([RED_x(ii),RED_x(ii+1)],[RED_z(ii),RED_z(ii+1 )])
end
%青い点の座標(適当な定数 )
BLUE_x=zeros(13,1);
for k=1:point_num
BLUE_x(k)=Z+3*(k-1);
end
BLUE_z=[100;110;125;145;175;200;220;200;175;145;125;110;100];
plot(BLUE_x,BLUE_z,'bo')
for ii=1:length(BLUE_x)-1
%青点間の線を結ぶ
line([BLUE_x(ii),BLUE_x(ii+1)],[BLUE_z(ii),BLUE_z(ii+1 )])
end
hold off%上書き停止
KURO_DAI_x=0;%黒丸大のx座標
KURO_DAI_z=1000;%黒丸大のz座標
%入射角の決定
r=30;
d=r*pi/180;
Z=tan(d)*KURO_DAI_z;
point_num_B=24;
point_num=13;
KURO_SHO_x=zeros(point_num_B,1);
KURO_SHO_z=zeros(point_num_B,1);
for k=1:point_num_B
KURO_SHO_x(k)=Z+3*(k-1);
end
for ii=1:length(KURO_SHO_x )
line([KURO_DAI_x,KURO_SHO_x(ii)],[KURO_DAI_z,KURO_SHO_z(ii)],'Color','black ') ;
end
hold on%上書き開始
for ii=1:length(KURO_SHO_x )
%黒丸間の線を結ぶ
line([KURO_DAI_x,KURO_SHO_x(ii)],[KURO_DAI_z,KURO_SHO_z(ii)],'Color','black ')
end
hold off%上書き停止
%距離の算出
L_RED=zeros(13,1);
for i=1:13
L_RED(i)=sqrt(((KURO_DAI_z-RED_z(:,i))^2)+((RED_x(:,i)-KURO_DAI_x)^2));
end
L_BLUE=zeros(13,1);
for i=1:13
L_BLUE(i)=sqrt(((KURO_DAI_z-BLUE_z(:,i))^2)+((BLUE_x(:,i)-KURO_DAI_x)^2));
end
%距離の差の算出
L_RB=L_RED-L_BLUE;
L_all=horzcat(L_RED,L_BLUE,L_RB);

Sign in to comment.


Hiroumi Mita
Hiroumi Mita on 31 Jan 2020
MATLABの変数は、スカラーではなく、ベクトルや行列です。
行列Z,Wの積は二乗が成立するには、Zの列数とWの行数が同じでなくてはいけません。
Z* W
Z=[z1 z2 z3],w=[w1 w2 w3]のとき
[sqrt((z1-w1)^2),sqrt((z2-w2)^2),sqrt((z3-w3)^2)]
といった各成分毎の演算を全体のベクトルでやりたいのか?
と思われますが、そのときは、成分毎の演算をするように.(ドット)が必要です。
次を参考にしましょう。
Ax=1
Az=11
Bx=[1 2 3 4 5 6 7 8 9 10]
Bz=[11 12 13 14 15 16 17 18 19 20]
L1=(Ax-Bx)^2+(Az-Bz)^2%間違い
L2=(Ax-Bx).^2+(Az-Bz).^2%正解 

Community Treasure Hunt

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

Start Hunting!