カットイン加速度算出のソースコード

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)>