カットイン加速度算出のソースコード
http://d.hatena.ne.jp/kenmo/20051211のソースコードの例をPythonで。
#!/usr/bin/env python # -*- coding: utf-8 -*- class Vec2D: """ 2次元ベクトル """ def __init__(self, x=0, y=0): """ コンストラクタ """ self.x = x self.y = y def __sub__(self, pos): """ 引き算 """ return Vec2D(self.x - pos.x, self.y - pos.y) def mulScalar(self, scalar): """ スカラー倍 """ return Vec2D(self.x*scalar, self.y*scalar) def devScalar(self, scalar): """ スカラー除算 """ return Vec2D(self.x/scalar, self.y/scalar) def __str__(self): """ 文字列表現 """ return "<x,y=(%f,%f)>"%(self.x, self.y) def getCutinPos(vStart, vEnd, fCurrent, fStart=0, fEnd=100): """ カットイン座標の算出 # vStart 開始座標 # vEnd 終了座標 # fCurrent 現在フレーム数 # fStart 開始フレーム数 # fEnd 終了フレーム数 """ if fCurrent < fStart: return vStart if fCurrent > fEnd: return vEnd vLen = vEnd - vStart # 移動距離 n = fEnd - fStart + 1 sum = n*(n-1)/2.0 vA = vLen.devScalar(sum) fN = fEnd - fCurrent + 1 fSum = fN*(fN-1)/2 return vEnd - vA.mulScalar(fSum) def main(): for i in range(11): print getCutinPos(Vec2D(0, 0), Vec2D(200, 0), i, 0, 10) if __name__ == "__main__": main()
こんな感じで出力されました。
<x,y=(0.000000,0.000000)> <x,y=(36.363636,0.000000)> <x,y=(69.090909,0.000000)> <x,y=(98.181818,0.000000)> <x,y=(123.636364,0.000000)> <x,y=(145.454545,0.000000)> <x,y=(163.636364,0.000000)> <x,y=(178.181818,0.000000)> <x,y=(189.090909,0.000000)> <x,y=(196.363636,0.000000)> <x,y=(200.000000,0.000000)>