Slide 29
Slide 29 text
Physics in Code
- (void)animationTick:(CFTimeInterval)dt finished:(BOOL *)finished
{
static const float frictionConstant = 20;
static const float springConstant = 300;
CGFloat time = (CGFloat) dt;
// friction force = velocity * friction constant
CGPoint frictionForce = CGPointMultiply(self.velocity, frictionConstant);
// spring force = (target point - current position) * spring constant
CGPoint springVector = CGPointSubtract(self.targetPoint, self.view.center);
CGPoint springForce = CGPointMultiply(springVector, springConstant);
// force = spring force - friction force
CGPoint force = CGPointSubtract(springForce, frictionForce);
// velocity = current velocity + force * time / mass
self.velocity = CGPointAdd(self.velocity, CGPointMultiply(force, time));
// position = current position + velocity * time
self.view.center = CGPointAdd(self.view.center, CGPointMultiply(self.velocity, time));
// stop the animation when it's done...
}