Scaling trochoid's and cycloid's input parameters with the Spyrograph `scale` method
Tags: python, opensource, showdev, tutorial
Published: 2023-04-01 14:00:00

*DISCLAIMER: This blog post was written by a human with the help of AI*

In this blog post, we will explore the `scale` method in the `spyrograph` package which enables users to easily scale their trochoid's and cycloid's input parameters

- [Scaling trochoid's and cycloid's input parameters with the spyrograph `scale` method](#scaling-trochoids-and-cycloids-input-parameters-with-the-spyrograph-scale-method)
- [Creating a `Hypocycloid`](#creating-a-hypocycloid)
- [Scaling the `Hypocycloid` with the `scale` method](#scaling-the-hypocycloid-with-the-scale-method)
- [Using `scale` to `trace` a beautiful pattern](#using-scale-to-trace-a-beautiful-pattern)
- [Conclusion](#conclusion)

{% github https://github.com/chris-greening/spyrograph %}

---

## Creating a `Hypocycloid` <a src="#creating-a-hypocycloid"></a>
First, let's create a `Hypocycloid` with 10 cusps to work with:

```python
import numpy as np
from spyrograph import Hypocycloid

hypocycloid = Hypocycloid.n_cusps(
    R=300,
    n=10,
    thetas=np.arange(0, 2*np.pi, .1)
)
```

![A circular shape with 20 cusps is drawn by a circle rolling around the interior of another fixed circle](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ygrcqkipx4px3rd0qzct.gif)

---

## Scaling the `Hypocycloid` with the `scale` method <a src="#scaling-the-hypocycloid-with-the-scale-method"></a>
Now that we have a `Hypocycloid`, we can easily scale it using the `scale` method:

```python
scaled_hypocycloid = hypocycloid.scale(factor=.5)
```

![A circular shape with 20 cusps is drawn by a circle rolling around the interior of another fixed circle and then an identical shape that is half the size is drawn right in the center](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tkgl99az9d8a3vrmxhcd.PNG)

The `scaled_hypocycloid` will now have its input parameters (`R`, `r`, and `d`) multiplied by the scaling factor

For example the radius of the big circle `R=300` will now be `R*.5=150`


---

## Using `scale` to `trace` a beautiful pattern <a src="#using-scale-to-trace-a-beautiful-pattern"></a>
Let's jump into a concrete example of using the `scale` method in action to `trace` a gradually smaller set of curves

```python
from spyrograph import Hypocycloid
import numpy as np
import time

screen = None
hypocycloid = Hypocycloid.n_cusps(
    R=200,
    n=20,
    theta_start=0,
    theta_stop=2*3.1415,
    theta_step=.01
)
for i in range(1,40):
    screen = hypocycloid.trace(screen=screen)
    hypocycloid = hypocycloid.scale(factor=((40/(i+40))))
    time.sleep(.1)
turtle.exitonclick()
```

![A circular shape with 20 cusps is drawn and then a slightly smaller one is drawn within that and then this continues down until a shape that resembles a spiderweb is drawn](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrdwu2dldad8r1i3yd24.gif)


---

## Conclusion <a src="#conclusion"></a>
The `scale` method in spyrograph provides a convenient way to resize trochoids and cycloids while preserving their shape

With just a single method call and a scaling factor, users can quickly create new shapes with different sizes, making the package even more versatile for artists, educators, and developers alike

Don't forget to experiment with different scaling factors and shapes to create stunning patterns and visuals!