シミュレーションのベースを作る

現実世界と仮想世界の対応

粒子(ボール)のシミュレーションを行うことを考えます。
まず、長さ(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