The Wikipedia articles for Reuleaux triangle and curve of constant width do a good job of describing the properties of a Reuleaux polygon, but they don't give a straightforward formula for computing or drawing such a figure, except in terms of the manual compass-and-straightedge construction.

Is there a formula or algorithm that, given the number of sides and the width/diameter, would give some data representation of a Reuleaux polygon that could be used to recreate it programmatically?

In particular, I'm looking for the coordinates of the vertices (or the angle/direction from one vertex to another) and the details of the arc connecting them.


I derived a parametric formula for Reuleaux polygons some time ago in this blog entry.

To make this post self-contained, here are the equations:

$$\begin{align*} x&=2\cos\frac{\pi}{2n}\cos\left(\frac12\left(t+\frac{\pi}{n}\left(2\left\lfloor\frac{n t}{2\pi}\right\rfloor+1\right)\right)\right)-\cos\left(\frac{\pi}{n}\left(2\left\lfloor\frac{n t}{2\pi}\right\rfloor+1\right)\right)\\ y&=2\cos\frac{\pi}{2n}\sin\left(\frac12\left(t+\frac{\pi}{n}\left(2\left\lfloor\frac{n t}{2\pi}\right\rfloor+1\right)\right)\right)-\sin\left(\frac{\pi}{n}\left(2\left\lfloor\frac{n t}{2\pi}\right\rfloor+1\right)\right) \end{align*}$$

Here is a Mathematica demonstration:

Table[ParametricPlot[2 Cos[π/(2 n)] Exp[I (t + π (2 Floor[n t/(2 π)] + 1)/n)/2] -
                     Exp[I π (2 Floor[n t/(2 π)] + 1)/n] // ReIm, {t, 0, 2 π}],
      {n, 3, 7, 2}] // GraphicsRow

Reuleaux polygons

(Note the use of the complex form of the parametric equations.)

For some applications, a polar equation (like the one in this answer) might be more convenient. One can use the usual distance formula in polar coordinates to derive the polar equation of an $n$-sided Reuleaux polygon:

$$r=\cos\left(\theta -\frac{2\pi}{n}\left\lfloor\frac{n (\theta -\pi )}{2 \pi }+\frac{1}{2}\right\rfloor\right)+\sqrt{1+2\cos\frac{\pi}{n}+\cos^2\left(\theta -\frac{2\pi}{n}\left\lfloor\frac{n (\theta -\pi)}{2 \pi}+\frac{1}{2}\right\rfloor\right)}$$

In Mathematica, one can do this:

Table[PolarPlot[With[{c = Cos[θ - 2 π Floor[n (θ - π)/(2 π) + 1/2]/n]}, 
                     c + Sqrt[1 + 2 Cos[π/n] + c^2]], {θ, 0, 2 π}],
      {n, 3, 7, 2}] // GraphicsRow

to get a picture identical to the one above.

| cite | improve this answer | |

As you can see from the diagram below, if $L$ is the length of a side of the regular polygon, $n$ (odd) the number of its sides and $W$ its width, then:

$$L=2W\sin{\pi\over 2n}.$$

enter image description here

| cite | improve this answer | |
  • $\begingroup$ While this is good to know, it doesn't give me the information I'm looking for. I've updated the initial post to clarify what I need. $\endgroup$ – GPHemsley May 13 '17 at 23:58
  • $\begingroup$ The angle between two sides is $(n-2)\pi/n$, as in all regular polygons (I'm using radians for the angles, here and above). Then, as explained on the Wikipedia page, you must draw an arc on every side, centered at the opposite vertex. And the number of vertices $n$ must be odd. $\endgroup$ – Aretino May 14 '17 at 6:32
  • $\begingroup$ I think your answer along with this coordinate calculation tool is giving me what I need. Is it true that a Reuleaux polygon with a relatively small number of sides will quickly approximate a circle? Is this relationship accurately represented by $nL$ vs. $W\pi$? $\endgroup$ – GPHemsley May 14 '17 at 8:07
  • $\begingroup$ As you can see in the above diagram, already for $n=7$ a Reuleaux polygon can be hardly discerned from a circle. $nL/(W\pi)$ could be a good indicator of this approximation: by the above formula this is the same as $\sin(x)/x$ with $x=\pi/(2n)$ and it quickly tends to $1$ for $n\to+\infty$. $\endgroup$ – Aretino May 14 '17 at 8:29

About four years ago I developed a program to generate Reuleaux logs that were based on random stars of an odd number of points. The algorithm starts at the origin in the complex plane and draws a line of unit length. The it goes to end of that line and draws another off at some random angle, say $\alpha_1$ (within limits, depending on the number of points in the star). You continue in that way up to the penultimate angle, with must be chosen such that the last line returns to the origin. This will require an iteration. Now that the star is complete, you go to each vertex and draw a circular arc to the two opposite points. And voila, you have Reuleaux log.

The program can also compute the perimeter, area, and centroid of the log cross-section. In addition, it can animate the rotation of the log in a square.

I appreciate that this is not as simple as I have made it sound. But I have a working Matlab code, which is not a glowing example of computer science, but I will gladly share it if we can find a vehicle to distribute it here.

| cite | improve this answer | |
  • $\begingroup$ May I suggest Matlab central? $\endgroup$ – svavil May 13 '17 at 19:39
  • $\begingroup$ @svavil That's a possibility, of course. But frankly, the program is not ready for prime time; it would be a lot of work for me to put it in a form that I would release publicly like that. $\endgroup$ – Cye Waldman May 13 '17 at 20:32
  • $\begingroup$ In this context, a log is an object that rolls, like the trunk of a tree? To be clear, I'm looking for a simple regular polygon with rounded edges. No need for fancy stars or anything. And as far as posting the code, you can opt for a GitHub gist or simply a Pastebin post. $\endgroup$ – GPHemsley May 14 '17 at 0:02
  • $\begingroup$ In that case, then I would suggest it best be a regular polygon of an odd number of sides and then draw the circular arcs centered at each vertex on the perimeter for the two opposite vertices. This will be your Reuleaux polygon. This will not work for even polygons. PS Thanks for suggestion of where to upload code. $\endgroup$ – Cye Waldman May 14 '17 at 0:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.