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

4 views (last 30 days)
kento fukuda
kento fukuda on 4 Jan 2019
Edited: Kazuya on 7 Jan 2019
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)で止まってしまいます。
どうプログラムを変えれば、上手く動きますか?

Answers (1)

Kazuya
Kazuya on 5 Jan 2019
Edited: Kazuya on 7 Jan 2019
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
前後のコードとあうように変更して試してみてください。

Categories

Find more on ループと条件付きステートメント in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!