Tikalon Header

Rounded Corners and Squircles

October 13, 2011

When I was still doing experiments that required specialized hardware, I would enlist the services of our able machinists in their fully equipped machine shop. I would proudly show them my skillfully crafted CAD drawings, at which they were too polite to laugh, and they would ask me questions about the many details that I had left out. One question they would often ask is whether they should chamfer the edges. A chamfer is a beveled or rounded edge.

The expression, "
Nature abhors a vacuum," may be the paramount universal principle, but "Nature doesn't like hard edges or sharp corners," may be a close second. My son, unlike his amateur programming father, is an actual computer professional. He pointed out an interesting Steve Jobs story in his blog. Steve was a firm believer in the no-sharp-corners principle.[1]

Bill Atkinson programmed QuickDraw, which was part of the Macintosh graphical user interface. The Motorola 68000 processor in the Macintosh was, as all microprocessors of the era, quite slow. There were, of course, no hardware floating-point operations, and integer multiplication and divisions were slow.

Bill had devised a way to draw ovals that eschewed all the fancy math and used just additions and subtractions. As explained in Ref. 1, Bill used the fact that the sum of a
sequence of odd numbers starting at one always equals a square; for example, 1 + 3 + 5 + 9 + 11 = 36. In general,

Sum of odd numbers equation

Steve, who was known to be a demanding character, was not that impressed. What Steve wanted was
rectangles with rounded corners, and he quickly pointed out many examples in their office and outside environments. Bill went back to his development station, and in just a few hours he devised an algorithm that drew rectangles with rounded corners that was almost as fast as his ovals algorithm.

Steve Jobs and Bill GatesSteve Jobs and Bill Gates at 'D5: All Things Digital' conference in Carlsbad, California, 2007.

(Photo by Joi Ito, via Wikimedia Commons).

Descartes would be proud of the extent that we've extended his concept of the graphical representation of algebraic equations in two dimensions to make our graphical user interfaces. Something like a rounded rectangle is one example of a superellipse poetically called a squircle. A squircle is an object that has qualities of both a square and a circle.

The general
equation for a superellipse, as shown below, was devised by the French mathematician, Gabriel Lamé, who is well known to mechanical engineers because of the Lamé parameters in elasticity. Lamé's second parameter is better known as the shear modulus.

Superellipse equation

This equation generates a wide variety of closed curves, including the ordinary
ellipse for n = 2. The ellipse, of course, becomes a circle when a = b. Other parameters will generate shapes that closely approximate a rectangle with rounded corners. For example, for a unit squircle, the parameters a and b are one, and the degree of "squareness" is set by the exponent, n. Large values of n give you shapes that look more like a square.

Squircles for n=4 and n=16Squircles for n=4 (blue) and n=16 (red)

Squircles will give you rectangles with rounded corners, but they're too computationally intensive for most purposes. I don't know how Bill Atkinson programmed rounded corners for QuickDraw, but I decided this would be an interesting programming exercise.

Whenever an
electrical engineer wants to smooth something, he puts it through a low pass filter. I decided to take this approach and feed a rectangle's corner multiple times through a simple low pass filter.

You can see the result in the figure. The low pass filter was just,
xi = 0.0625xi-2 + 0.0125xi-1 + 0.625xi + 0.125xi+1 + 0.0625xi+2
yi = 0.0625yi-2 + 0.0125yi-1 + 0.625yi + 0.125yi+1 + 0.0625yi+2

and the corner was passed through this filter five time. More rounding can be achieved with a larger number of passes through the filter. The actual effect will depend on the
granularity of the input data points. This process is most likely not original with me, but how would I know? I'm just a computer amateur.

Smooth corner implemented by a low-pass filterRounded corner obtained by passing a rectangle's data points through a low pass filter.

Graph via Gnumeric using data from a C program by the author.

(C program source code).

Reference:

  1. Andy Hertzfeld, "Round Rects Are Everywhere!" Folklore.org, May 1981.