On 27 Apr 2008, at 12:24 pm, John C. Randolph wrote:

On Apr 21, 2008, at 5:35 PM, Graham Cox wrote:

- (NSPoint)     pointOnPathAtLength:(float) length slope:(float*) slope;

I notice that your lengthOfBezier() function does an approximation similar to what we'd get in postscript by executing flattenpath and then adding up the lengths of the resulting line segments.

I generally find that Quartz doesn't flatten by that much in practice (though of course you can set this value), so the spacing is quite coarse between each point especially for already quite "flat" curves, making it not that suitable for calculating the length - you still end up having to interpolate the last segment.

In my code it actually does a binary subdivision of each curve segment until the point on the path is within some epsilon of the wanted point - I typically use 0.1 (points) as certainly on screen this is very adequate and takes very little time to execute to this degree of accuracy. Even for printed output that's only one pixel error at 720dpi, so it's pretty close. Most of the time you're interested in something that looks right, so a mathematically perfect solution is not really warranted.

I've asked several math majors over the years if they could give me an exact function for the length of a bezier curve. They've generally told me it was possible, but none of them actually produced it.

Yup, that seems similar to my experience too, all talk and no trousers!

G.
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to