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!