2次元ランダムウォーク
Posted feedbacks - Python
適当に。
1 2 3 4 5 6 7 8 9 10 11 12 13 | from random import uniform
from itertools import islice
from math import sin,cos,pi
def randomwalk(x = 0,y = 0):
while True:
rad = uniform(0,2*pi)
x, y = x + cos(rad), y + sin(rad)
yield (x,y)
def main():
for i,(x,y) in enumerate(islice(randomwalk(),10)):
print i,x,y
|
Tkinterを使ってGUIでやってみた。ステップ数はスライダで調節し、incrementボタンで開始してください。
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #!/usr/bin/env python
import Tkinter
import random
import math
class randomWalkTk2D:
def __init__(self):
window = Tkinter.Tk()
self.width = 800
self.height = 600
self.canvas = Tkinter.Canvas(window, bg="white",
width=self.width,
height=self.height)
self.canvas.pack()
self.move = Tkinter.Button(window, text="increment",
command=self.increment)
self.move.pack(side=Tkinter.RIGHT)
self.chooser = Tkinter.Scale(window, from_=1, to=10000, orient=Tkinter.HORIZONTAL)
self.chooser.pack(side=Tkinter.LEFT)
self.chooser.set(100)
self.window = window
self.x = float(self.width)/2
self.y = float(self.height)/2
window.mainloop()
def increment(self,count=-1):
if count==-1:
count = self.chooser.get()
if count==0:
return
rad = random.random() * 2 * math.pi
newx = self.x + math.cos(rad)
newy = self.y + math.sin(rad)
self.canvas.create_line(int(self.x),int(self.y),int(newx),int(newy),
fill='red',width=1)
self.x,self.y = newx,newy
self.window.after(1,self.increment,count-1)
def clearCanvas(self):
for item in self.objects[:]:
self.canvas.delete(item)
self.objects = []
randomWalkTk2D()
|


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 ]