📜  Python中的 Rhodonea Curves 和 Maurer Rose(1)

📅  最后修改于: 2023-12-03 15:04:34.090000             🧑  作者: Mango

Python中的 Rhodonea Curves 和 Maurer Rose

在数学中,Rhodonea Curves 和 Maurer Rose 是一类美丽的曲线,它们通常由极坐标方程表示。在 Python 中,使用 matplotlib 库可以轻松绘制这些曲线。

Rhodonea Curves

Rhodonea Curves,又称 Rose Curves,是由极坐标方程 $r = a\cos(k\theta)$ 或 $r = a\sin(k\theta)$ 定义的一类曲线。其中 $a$ 和 $k$ 是常数,$\theta$ 是参数,通常取 $[0, 2\pi]$。

下面是使用 matplotlib 绘制 Rhodonea Curves 的示例代码:

import matplotlib.pyplot as plt
import numpy as np

a = 1
k = 7

theta = np.linspace(0, 2*np.pi, 500)
r = a*np.cos(k*theta)

x = r*np.cos(theta)
y = r*np.sin(theta)

fig, ax = plt.subplots(figsize=(6, 6))
ax.plot(x, y)
ax.set_aspect('equal', 'box')
ax.axis('off')
plt.show()

以上代码将绘制一个 $k = 7$ 的 Rhodonea 曲线,如下图所示:

Rhodonea Curve

Maurer Rose

Maurer Rose,又称格子玫瑰,是一类形如玫瑰花的曲线。它由以下极坐标方程定义:

$r = \sin \left(\frac{m}{n}\theta\right)$

其中 $m$ 和 $n$ 是正整数,$\theta$ 的取值通常是 $[0, 2\pi]$。为了得到一个完整的 Maurer Rose,我们需要绘制 $\frac{n}{gcd(n, m)}$ 个周长,其中 gcd 表示 $n$ 和 $m$ 的最大公约数。

以下是使用 matplotlib 绘制 Maurer Rose 的示例代码:

import matplotlib.pyplot as plt
import numpy as np

m = 5
n = 71

gcd = np.gcd(n, m)
petals = n // gcd

theta = np.linspace(0, 2*np.pi*petals, 5000)
r = np.sin(m/n*theta)

x = r*np.cos(theta)
y = r*np.sin(theta)

fig, ax = plt.subplots(figsize=(6, 6))
ax.plot(x, y)
ax.set_aspect('equal', 'box')
ax.axis('off')
plt.show()

以上代码将绘制一个 $m=5$,$n=71$ 的 Maurer Rose,如下图所示:

Maurer Rose

使用这两个公式,我们可以创造出许多类似于自然的、艺术化的图案。尝试修改参数和添加动画,可以得到更加有趣的效果。