Loci
Loci

Reputation:

Outline of cubic bezier curve stroke

By stroke of the cubic bezier curve I mean rendering a curve 'A' with a specific line width 'w'.

How can I derive other cubic bezier curves that describe the outline of the stroke of bezier 'A' ?

Upvotes: 16

Views: 11587

Answers (2)

Malcolm McLean
Malcolm McLean

Reputation: 6404

To do is accurately is as others have explained very difficult. The offset curve is not a cubic Bezier and is very intractable. Then concavities that are deeper than the offset cause intersection problems.

The good news is that normally you want to calculate a stroke offset for rendering, so only need pixel accuracy. Also, the various intersections still create a filled polygon, if you observe the winding rule for polygon filling. So you flatten the curve first, then offset in a linear fashion, and it becomes a straight line polygon problem.

Some code here can be used as a reference implementation: https://github.com/memononen/nanosvg

Upvotes: 2

Nils Pipenbrinck
Nils Pipenbrinck

Reputation: 86383

Ohhh. You want to get the offset-curves of an bezier curve.

Bad news. this is hard because these curves can't be simply derived numerical. They contain all kinds of intersections, loops and other nasty stuff.

There are some approximations though. The best approach I've read so far is from a paper by Thomas F. Hain (Fast, Precise Flattening of Cubic Bézier Path and Offset Curves).

He does flattening, so his paper is mostly about decomposes the offset curves into line-segments and circular arc-segments, but you can merge them back to beziers later.

For better understanding you may want to read his other bezier related papers as well.

Upvotes: 20

Related Questions