Skip to main content

LinearInterpolator — wiki

import Numeric

def linear_interpolate(start, stop, seconds, fps=30):
    """
    Given a start and stop vector (2 or 3 element tuple), and a time period 
    at a default 30 fps, yield a sequence of vectors which interpolate 
    between stop and start.
    """
    start = Numeric.array(start, Numeric.Float)
    stop = Numeric.array(stop, Numeric.Float)
    diff = stop - start
    inc = 1.0 / fps
    step = diff * inc
    current = Numeric.array(start)
    stop_second = inc * 2
    while seconds > stop_second:
        seconds -= inc
        current += step
        yield tuple(current)
    yield tuple(stop)

Comments
After playing around with this a little bit I noticed that there are several things needing improvement. The first is on line 13, which should read:
step = diff * inc / seconds
to properly factor in the desired timeframe. The second is the handling of seconds and stop_second. The latter is actually completely unnecessary and can be replaced with inc.

-- 23 April 2007 Duoas



page migrated to new wiki