matlabについての質問です。 跳ね返るプログラムを作りたいです。

조회 수: 7 (최근 30일)
kento fukuda
kento fukuda 2019년 1월 4일
편집: Kazuya 2019년 1월 7일
matlabについての質問です。
ある22×22の領域において、
無線端末を(1,5)から(1,18)の辺の間にランダムに配置し、
その辺を上下に動かしたいです。
そのため無線端末の位置を(xi,yi)とし、
1秒ごとにyの値を1ずつ増加させ、(1,18)に達したら今度はyの値を
1ずつ減少させ、(1,5)に達したらまたyの値を1ずつ増加させるプログラムを作りたいです。
xi = 1;
yi = obj.yi_;
if(yi >= 18)
yi = obj.yi_ - 1;
elseif(yi <= 5)
yi = obj.yi_ + 1;
end
とプログラムを組みましたが、このプログラムでは、
(1,18)に達して以降ずっと(1,18)で止まってしまいます。
どうプログラムを変えれば、上手く動きますか?

답변 (1개)

Kazuya
Kazuya 2019년 1월 5일
편집: Kazuya 2019년 1월 7일
if(yi >= 18)
yi = obj.yi_ - 1;
elseif(yi <= 5)
yi = obj.yi_ + 1;
end
だと、yi が 18 以上(or 5 以下)の時にだけ - 1 (or + 1) されるので、うまくいかないのかと思います。例えば yi = 18 の次は yi = 17 となり、どちらの if 条件にも合致しなくなります。実装したいのは
  • yi = 18 になったら、yi = 5 になるまで1ずつ減少させ続ける
  • yi = 5 になったら、yi = 5 になるまで1ずつ増加させ続ける
ということですよね?全体像が見えないとわかりませんが、例えば obj に、今「1ずつ減少させ続ける」モードなのか、それとも「1ずつ増加させ続ける」モードなのかを識別させるプロパティでも定義する方法はどうでしょう?
if(yi == 5)
obj.upmode = true;
end
if(yi == 18)
obj.upmode = false;
end
if (obj.upmode)
yi = obj.yi_ + 1;
else
yi = obj.yi_ - 1;
end
前後のコードとあうように変更して試してみてください。

카테고리

Help CenterFile Exchange에서 ループと条件付きステートメント에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!