MOn*_*DaR 6 python plot spline smoothing
我正在研究一个显示移动划艇的小程序.以下显示了一个简单的示例代码(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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,船只有一个步速和每分钟行数.每次move(deltaT)调用该方法时,它都会根据速度移动一定距离.
上面的船只是以恒定的速度行进,这是不现实的.真正的划艇在行程开始时加速,然后在划桨叶片离开水后减速.在线有许多图表显示了典型的划船曲线(此处显示的力,速度看起来相似):
资料来源:highperformancerowing.net
速度应该随着时间的推移而保持不变,但它应该在中风期间发生变化.
将恒定速度改变为曲线的最佳方法是什么(至少基本上)类似于更逼真的划船冲程?
注意:有关如何更好地标记此问题的任何想法?这是算法问题吗?
如果您的目标只是想出一些视觉上合理的东西,而不是进行完整的物理模拟,您可以简单地向该位置添加正弦波。
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)
Run Code Online (Sandbox Code Playgroud)
你需要小心变化var,如果变化太高,船可能会倒退并破坏幻觉。
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |