現実世界と仮想世界の対応
粒子(ボール)のシミュレーションを行うことを考えます。
まず、長さ(m)、時間(s)で表される現実世界と、
長さ(pixel)、時間(frame)で表される仮想世界の対応を決めます。
r_scale = 0.01 # m/pixel t_scale = 0.01 # s/frame
座標系の変換
位置について、現実世界と仮想世界の座標(x,y)を相互に変換する関数を作成します。
width = screen.get_width() height = screen.get_height() gxcenter = width/2.0 gycenter = width/2.0 #シミュレーション座標→画面座標 def xtogx(x): gx = x/r_scale+gxcenter return(gx) def ytogy(y): gy = -y/r_scale+gycenter return(gy) def rtogr(r): gr = r/r_scale return(gr) #画面座標→シミュレーション座標 def gxtox(gx): x = r_scale*(gx-gxcenter) return(x) def gytoy(gy): y = -r_scale*(gy-gycenter) return(y) def grtor(gr): r = r_scale*gr return(r)
時間の表示
画面内にシミュレーション世界の時間を表示します。
font1 = pygame.font.SysFont("PlemolJP", 50) #フォントを指定 gt = 0.0 def showtime(unit): if unit=="s": timestr = "%1.4f %s" % (gt, unit) if unit=="day": timestr = "%1.4f %s" % (gt/86400.0, unit) text1 = font1.render(timestr, True, (255,255,255)) screen.blit(text1, (10,10)) #メインループ内 gt += t_scale