On Tue, 22 Nov 2005, Warren Francis wrote:

> For my purposes, I think you're right about the natural cubic splines. 
> Guaranteeing that an object passes through an exact point in space will 
> be more immediately useful than trying to create rules governing where 
> control points ought to be placed so that the object passes close enough 
> to where I intended it to go.

Right so. I wrote that code the first time when i was in a similar spot 
myself - trying to draw maps with nice smooth roads etc based on a fairly 
sparse set of points - so i felt your pain.

> Thanks for the insight, I never would have found that on my own.  At 
> least not until Google labs comes out with a search engine that gives 
> names for what you're thinking of. ;-)

You're in for a wait - i think that feature's scheduled for summer 2006.

> I know this is a fairly pitiful request, since it just involves parsing 
> your code, but I'm new enough to this that I'd benefit greatly from an 
> couple of lines of example code, implementing your classes... how do I 
> go from a set of coordinates to a Natural Cubic Spline, using your 
> python code?

Pitiful but legit - i haven't documented that code at all well. If you go 
right to the foot of my code, you'll find a simple test routine, which 
shows you the skeleton of how to drive the code. It looks a bit like this 
(this is slightly simplified):

def test_spline():
        knots = [(0, 0), (0, 1), (1, 0), (0, -2), (-3, 0)] # a spiral
        trace = []
        c = NaturalCubicSpline(tuples2points(knots))
        u = 0.0
        du = 0.1
        lim = len(c) + du
        while (u < lim):
                p = c(u)
                trace.append(tuple(p))
                u = u + du
        return trace

tuples2points is a helper function which turns your coordinates from a 
list of tuples (really, an iterable of length-2 iterables) to a list of 
Points. The alternative way of doing it is something like:

curve = NaturalCubicSpline()
for x, y in knot_coords:
        curve.knots.append(Point(x, y))
do_something_with(curve)

tom

-- 
I DO IT WRONG!!!
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to