Maurer rose ()
[sketch]
- Tools: Python
- Source code: https://github.com/vec2pt/py-sketches
- Links:
import numpy as np
from PIL import Image, ImageDraw
def maurer_rose(n: int, d: int) -> np.ndarray:
"""Maurer rose.
Args:
n: Positive integer.
d: Degrees.
Returns:
np.ndarray: Maurer rose points array.
"""
k = np.arange(361) * d * np.pi / 180
r = np.sin(n * k)
return np.array([np.cos(k), np.sin(k)]) * r
def _plot_maurer_rose(
image_size: tuple[int, int],
n_range: tuple[int, int],
d_range: tuple[int, int],
scale: float = 36,
margin: int = 4,
) -> Image.Image:
img = Image.new("RGB", image_size, "white")
draw = ImageDraw.Draw(img)
for j, d in enumerate(range(*d_range)):
for i, n in enumerate(range(*n_range)):
position = np.array(
[
scale * i * 2 + scale + i * margin * 2 + margin,
scale * j * 2 + scale + j * margin * 2 + margin,
]
)
points = maurer_rose(n, d).T * scale + position
draw.line(points.tolist(), fill="black", width=0)
return img
if __name__ == "__main__":
img = _plot_maurer_rose((800, 800), (9, 19), (24, 34))
img.save("maurer-rose.png")
