我正在开发一个显示移动的划艇的小程序。下面是一个简单的示例代码(Python 2.x):
import time
class Boat:
def __init__(self, pace, spm):
self.pace = pace #velocity of the boat in m/s
self.spm = spm #strokes per minute
self.distance = 0 #distance travelled
def move(self, deltaT):
self.distance = self.distance + (self.pace * deltaT)
boat1 = Boat(3.33, 20)
while True:
boat1.move(0.1)
print boat1.distance
time.sleep(0.1)
如您所见,船的速度和行数与每分钟的划水次数有关。每次调用 move(deltaT)
方法时,它都会根据步调移动一定距离。
上面的船只是以恒定的速度行驶,这是不现实的。真正的划艇在开始划水时会加速,然后在桨叶离开水面后减速。网上有很多图表显示了典型的划船曲线(这里显示的是力,速度看起来很相似):
配速应随时间保持不变,但应在划水过程中发生变化。
将恒定速度变为(至少基本上)类似于更逼真的划船划水的曲线的最佳方法是什么?
注意:关于如何更好地标记这个问题有什么想法吗?是算法问题吗?
最佳答案
如果您的目标只是想出一些视觉上合理的东西而不是进行完整的物理模拟,您可以简单地向该位置添加一个正弦波。
class Boat:
def __init__(self, pace, spm, var=0.5):
self.pace = pace #average velocity of the boat in m/s
self.sps = spm/60.0 #strokes per second
self.var = var #variation in speed from 0-1
self.totalT = 0 #total time
self.distance = 0 #distance traveled
def move(self, deltaT):
self.totalT += deltaT
self.distance = self.pace * (self.totalT + self.var * math.sin(self.totalT * self.sps * 2*math.pi)
你需要小心变化 var
,如果它变得太高,船可能会倒退并破坏幻觉。
关于python - 类似于划船划水的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27786146/