![](https://i0.wp.com/www.raucci.net/wp-content/uploads/2021/09/theodorus-3.png?resize=613%2C460&ssl=1)
The spiral of Theodorus is a spiral composed of right triangles. Hundreds of years ago, Theodorus of Cyrene constructed continuous right triangles and got a beautiful spiral. He used that spiral to prove that all non-square integers from 3–17 are irrational.
How would you plot this spiral? At each step, you need to draw a segment of length 1, perpendicular to the hypotenuse of the previous triangle. There are two perpendicular directions, and you want to choose the one that moves counterclockwise.
![](https://i0.wp.com/www.raucci.net/wp-content/uploads/2021/09/theodorus.png?resize=545%2C532&ssl=1)
If we step outside the xy plane, we can compute the cross product of the unit vector in the z direction with the vector (x, y). The cross product will be perpendicular to both, and by the right-hand rule, it will point in the counterclockwise direction.
The cross product of (0, 0, 1) and (x, y, 0) is (-y, x, 0), so the direction we want to go in the xy plane is (-y, x). We divide this vector by its length to get a vector of length 1, then add it to our previous point.
Here is a code written in Python
to plot the spiral
import matplotlib.pyplot as plt
def vertex(x, y):
h = (x**2 + y**2)**0.5
return (x - y/h, y + x/h)
plt.axes().set_aspect(1)
plt.axis('off')
# base of the first triangle
plt.plot([0, 1], [0, 0])
N = 17
x_old, y_old = 1, 0
for n in range(1, N):
x_new, y_new = vertex(x_old, y_old)
# draw short side
plt.plot([x_old, x_new], [y_old, y_new])
# draw hypotenuse
plt.plot([0, x_new], [0, y_new])
x_old, y_old = x_new, y_new
plt.show()
![](https://i0.wp.com/www.raucci.net/wp-content/uploads/2021/09/Figure_1.png?resize=640%2C480&ssl=1)