http://jbuckland.com/pantograph/delta.html

http://github.com/ambuc/pantograph

I was inspired by the above video (depicting a set of record players in control of a pantograph) to derive a closed-form solution for the vector position of the pen in terms of the angles of rotation for each of the arms

# Derivation of nodes $A$, $B$, $P$, $Q$, and $M$

For our pantograph assembly, we define the centers of two circles $A$ and $B$, each with a radius $r_a$ and $r_b$, respectively. The current positions of nodes $P$ and $Q$ are determined by angles $\theta_a$ and $\theta_b$.

Taking the position of $A$ as the origin, we can find

# Derivation of node $R$

Attached to the points $P$, $Q$ are two rigid bodies of length $\ell_1$, which meet at variable point $R$. By finding the midpoint $M$ between $P$ and $Q$, we can find the right triangle $\triangle PMR$. From the definition of slope, we find $\overline{PQ}$ to be

Because $\overline{MR} \perp \overline{PQ}$, we can find the slope of the line $\overline{MR}$ to be

In addition, we can construct the right triangle $\triangle PMR$ with known side lengths $a$ and $g$, where

Thus, $h = \sqrt{(\ell_1)^2 - g^2}$. This allows us to find

# Derivation of nodes $S$, $T$

We can easily find $\varphi_a$, $\varphi_b$ from the slopes of lines $\overline{PR}$ and $\overline{QR}$, respectively.

We can then write nodes $S$ and $T$ as

# Derivation of node $U$

It is trivial to present a construction of triangle $\triangle TUS$ that directly mirrors that of triangle $\triangle QRP$. We find

Thus, we can write node $U$ as

Distressingly, this appears to be a function that cannot be resolved into a one-to-one mapping from the vector space $(\phi_a, \phi_b)$ onto the $(x,y)$ coordinate system of the pen by any conventional means: that is, for each $(x,y)$ on the pad, there are two or three sets of $(\phi_a, \phi_b)$ positions that could achieve that position.

At a loss with the tools of continuous mathematics, I turned to discrete simulations: a set of three processing.js simulations illustrating what turned out to be a very complex space.

# Demos

- Demo $\alpha$: Mouse-driven geometry demo of pantograph behavior
- Demo $\beta$: Mouse-driven geometry demo of point names
- Demo $\delta$: Sample space of points available from an array of rotational values