2次元ランダムウォーク
Posted feedbacks - C++
まずはシンプルなところで。 1 0 -1 2 0 0 3 0 1 4 -1 1 5 -2 1 6 -1 1 7 0 1 8 -1 1 9 -1 0 10 -1 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <cstdlib>
#include <complex>
#include <iostream>
#include <iomanip>
int main(int args, char* argv[])
{
std::complex<int> d[] =
{
std::complex<int>( 1, 0),
std::complex<int>( 0, 1),
std::complex<int>(-1, 0),
std::complex<int>( 0, -1)
};
std::complex<int> p(0, 0);
for(int i = 1; i <= 10; ++i)
{
p += d[std::rand() % 4];
std::cout << std::setw(4) << i
<< std::setw(4) << p.real()
<< std::setw(4) << p.imag()
<< std::endl;
}
return 0;
}
|


ytakenaka
#6806()
Rating2/2=1.00
2次元ランダムウォークをつくってみてください。
******
元は3本建てにしようかと思ったけど、上の一本に絞りました。おまけとして、3本とも下に補足しておきます。作れるようでしたら作ってみてください。
1.一次元のランダムウォークを作ってください。
1.1 データファイルに残してください。 フォーマット:時間 位置
おまけ)
可視化が簡単な処理系・プログラミング言語でしたら実際に可視化してみてください。フォーマットしたファイルをスプレッドシートやplotutilitiesなどの可視化ソフトを使って、実際に動きをかくにんしてみましょう。:-)
2.同じように2次元のランダムウォークを作ってください。
2.1 1.1と同じようにしてください。
フォーマット:時間 x位置 y位置
3.凝りたければ、アニメーションにするもよし、3次元の動きをとるもよし、自分の想像力がいかせるところまでやってみてください。
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%AF
分からないというヒトへの分かりにくいヒント:
今の位置から次の時間の位置が決まるのですが、決まりかたが、乱数で一歩後退するか一歩先にいくか?ということをやればよいです。
[ reply ]