Remix.run Logo
The mathematical beauty of hyperbezier curves(linebender.org)
118 points by raphlinus 6 days ago | 13 comments
momojo 3 hours ago | parent | next [-]

I love bezier curves. In community-college, it was the first time I ever encountered a subject that made me want to go do more research on my own. One of my core memories is toiling away for multiple nights when the rest of the house was asleep on my 2015 Macbook Pro, writing janky p5.js code and pressing refresh on the browser page over and over until suddenly, I started see real, beautiful curves blossom from my control points.

I just went back to dig up some old sources[0], and I can't believe this post is almost a decade old now. This guy's explainers and animations were leagues beyond any other resource I could find through Google searc at the time.

[0] https://jamie-wong.com/post/bezier-curves/

dahart 2 hours ago | parent | prev | next [-]

So Raph, how do you draw these things? I’m not sure exactly where I’d start given an equation of the curvature or tangent (I assume?) angle. The pen tool link talks about “auto points”, giving the impression that it’s a sort of Bezier subdivision with some constraints, is that accurate? And your article mentions you’ve since fixed some things in the math - so this is a bit different from the pen tool, not using auto points?

Playing with your demo, I see the curve lock shape in certain configurations and stop moving even when I’m dragging one of the control points around. Is this a temporary or numerical stability issue, or is this a property of hyperbezier curves? For example if I arrange the control points in a square with P0 bottom left, C1 bottom right, C2 top left, P3 top right, and then drag C1 to the right, the shape locks up quickly. Eyeballing, it’s maybe when the length of P0C1 is ~1.5 times the length of C2P3? Moving C1 further right and up/down, there’s a huge area where moving C1 doesn’t affect the shape of the curve.

I was slightly curious about the P/C naming as well - is this a Hermite-like idea where P[03] are points and C[12] are similar to tangent vectors? Why not use P[0123]?

Probably one really obvious thing worth mentioning - Beziers are indeed very versatile, but it has to be said that one of the reasons they’re so popular is because the math is so simple, right? Decomposable into linear steps, integer exponents, with a couple multiplies of only your parameter you can evaluate them with a matrix multiply. They’re trivial to draw. Add in the controllability and intuitiveness and simplicity of computing other properties of the curve (such as finding roots & inflections & bounding boxes, splitting curves, etc.), and it makes sense they’re very popular. Hyperbeziers look interesting, and I don’t have intuition on their uses yet, but I assume their rendering involves heavier math than Beziers - since the curvature & angle equations have a divide & square root? Can they be split or subdivided easily?

You’ve been in search of a better curve for a long time. I’m wondering how you think about and where you stand on subdividing curves like Bezier vs finding a more perfect interpolation. Obviously there are tradeoffs, but are you aiming at problems that can’t be solved in practice using subdivision/approximation? I’d also be curious to hear your thoughts on hyperbeziers vs NURBS.

diabllicseagull 4 hours ago | parent | prev | next [-]

One big aspect that made Bezier popular was local support, i.e. moving control points resulted in expected changes in the same direction. It's interesting that this is the result of a search for 'a curve family better suited for interactive design than cubic Beziers.' I think it's better for achieving curve quality in the sense of curvature changes, but not so much in interactivity.

adrian_b 2 hours ago | parent | next [-]

Trying the example from TFA, I think that it is easy to acquire a good intuition about how the curve moves when you pull a control point and the shapes of the curves that you can obtain are more beautiful and more interesting than what you obtain with cubic Beziers.

So I believe that if for you the "interactivity" does not seem better, that is more likely to be caused by being much more familiar about how cubic Beziers behave, from past experience, than because these hyperbezier curves were really less suited for interactivity. Also, the current implementation in JavaScript seems buggy.

For me, the poor approximation by cubic Beziers of some important curves, like conics and the Euler spiral, is an extremely serious defect, so I like these hyperbezier curves much more and I intend to investigate how efficient can they be, from a computational viewpoint.

Karliss 26 minutes ago | parent [-]

There are two bad properties in terms of interactivity (and for other uses). In some configurations hyperbezier explodes towards infinity or at least way outside the bounds of control points. Cubic beziers don't do that, if control points are bounded the curve will be as well. This is direct result of how cubic bezier can be calculated with series of linear interpolations. Other issue was that there were discontinuities while moving through parameter space or at least very sudden jumps, small changes of control points caused curve flip to completely different shape.

shuwix an hour ago | parent | prev | next [-]

One big aspect that made bezier curves popular was Quake 3 Arena. That was literally first time general public even heard the name.

WillAdams 4 hours ago | parent | prev [-]

Yeah, editing TrueType fonts w/ B-splines which have a shared off-curve control point between two on-curve control points is nightmarish as a small change will ripple through the entire outline.

krtkush 4 hours ago | parent | prev | next [-]

Related: Last year I had the pleasure to work with Bezier curves to make a very specific UI for an app I was working on.

I wrote down a bunch of posts on how I achieved the UI primarly to explain the process to my future self[0]

As a mobile developer it was so much fun to do something other than building a CRUD app.

[0]https://www.krtkush.com/computer-graphics-basics-with-compos...

dcrazy 3 hours ago | parent | prev | next [-]

Playing with the example, the controls points don’t feel any more intuitive to work with than traditional cubic Béziers. They still exhibit annoying behaviors near the endpoints, though they don’t tend to “explode” like traditional cubics.

I find it curious that the author makes no attempt to compare his solution to other splines like B-splines or Catmull-Rom splines, given their popularity in computer graphics and CAD.

monster_truck an hour ago | parent | prev | next [-]

This is awesome.

Geometric topology makes my brain itch. I refuse to engage with it, I am certain it would drive me mad.

I do agree though, those elastica (elasticas? elastici??) are fine as hell

somat 4 hours ago | parent | prev | next [-]

Very cool demo, The curve does sort of go screwball when the control points are close together.

After playing with it some more. Not close together, but more side loaded. On reflection while many of these forms would be awkward to find in a drawing program, I think this is the source of the superior spiral the author likes.

Sharlin 3 hours ago | parent [-]

It can’t do a loop (or a cusp, in the limit) like cubic Beziers can, and may instead "lock" to a weird hook-like shape, I’m not sure whether it’s just an artifact of the way the demo tries to match the curve to a Bezier.

Loops and cusps are of course not very useful in 2D graphic or typeface design, and even if you’re animating a plane or designing a rollercoaster you’d probably use more than one Bezier to make up a looping shape.

achierius 5 hours ago | parent | prev [-]

One unintuitive thing I noticed about these curves, at least from the demo on the page, is that they have both areas where their behavior quickly 'snaps' from one configuration to another, and areas where they saturate such that changes to the control handles no longer produce any movement. Standard Bezier curves don't have either of these; I wonder if that's essentially coupled to the higher expressivity they offer?