用偶数花瓣绘制 python 的玫瑰曲线

Plotting rose curve in python with even petals

我试图使用以下代码在 python 中绘制玫瑰曲线:

import numpy as np
from matplotlib import pyplot as plt

theta = np.linspace(0, 2*np.pi, 1000)

r = 3* np.sin(8 * theta)

plt.polar(theta, r, 'r')

plt.show()

现在这是玫瑰曲线 $r= 3 \sin{8\theta}$,因为 $8$ 是偶数所以曲线应该有 $2.8=16$ 花瓣。但是输出给了我一朵花 $8$ 花瓣的玫瑰。 我不确定 python 是否理解玫瑰曲线的数学定义,或者我们修改了我们的定义以便 Python 理解它。 这里有人对我应该在我的代码中做什么以获得我想要的输出有任何建议吗? 感谢任何帮助。

谢谢。

您的问题与此相关问题中遇到的问题类似:

问题是 matplotlib.pyplot.polar 没有 以数学家期望的方式在极坐标中绘制曲线。

数学家会期望半径为 0 表示原点,负半径反映在原点上;特别是,极坐标 (r, t)(-r, t+pi) 应指定相同的点。

r 为负数时,您可以通过手动将 pi 添加到 theta 并用其绝对值替换 r 来强制执行此行为。

import numpy as np
from matplotlib import pyplot as plt

theta = np.linspace(0, 2*np.pi, 1000)

r = 3* np.sin(8 * theta)

# plt.polar(theta, r, 'r')  # remove this line
plt.polar(theta+(r<0)*np.pi, np.abs(r), 'r')

plt.show()