【问题标题】:Graphing A Lima Bean Curve Leads To An Overlap Bump绘制利马豆曲线会导致重叠凹凸
【发布时间】:2022-01-01 18:22:18
【问题描述】:

我正在尝试绘制这个等式 r=a(sin^3theta+cos^3theta)

x = a * cos theta(sin^3theta+cos^3theta)

y = a * sin theta(sin^3theta+cos^3theta)

结果是利马豆。但是,我有两个问题。第一个问题是,在 bean 的右下中心部分有一个凸起,看起来好像绘制了太多点,并且图形重叠并突然停止。

第二个问题是平滑要导出为 png 以供以后操作的图形。我已经通过将plt.save fig 用于 SVG 解决了这个问题,曲线变得非常平滑。但是,我留下了那个凹凸问题。

我知道 SciPy 有一个插值功能,但我还不确定如何实现它,或者如果我仍然有这个奇怪的凸起是否值得。

import numpy as np
from matplotlib import pyplot as plt

t = np.arange(0, 2*np.pi, .01)[1:]
#t = np.linspace(0,2*np.pi,100)

x = 16 * np.cos(t)*((np.sin(t)**3) + np.cos(t)**3)
y = 13 * np.sin(t)*((np.sin(t)**3) + np.cos(t)**3)



fig = plt.figure(figsize = (5, 5), dpi=72)
ax = fig.add_subplot(polar = False)

ax.plot(x, y, c=(1,0.2,0.5),lw=15)
plt.axis('off')
#plt.show()
plt.savefig("filepath.svg", format = 'svg', dpi=300)

不需要 300 dpi 我只是在测试它对图像的影响。 尽管这在技术上不是一个圆圈,但它仍然应该是 2 * Pi 才能完成一个完整的旋转。 将停止点调整为 1 而不是 0 可以修复凹凸,但在视觉上将其切成两半。即使我使用了3 * Pi,凹凸仍然存在。

我使用了 matplotlib 的 Polar 模式,但它的大小和位置有限。使用参数方程似乎更容易配置。

与 SVG 相比,IIRC png 在其他 python 程序中更容易操作。但目前,作为 png,它看起来很糟糕。

【问题讨论】:

  • 15 的线条粗细是影响凹凸怪异度的最大因素。您可以尝试使用更薄的东西。要获得更平滑的 png 文件,您可以尝试更大的 dpi。 t 的最平滑值类似于 t = np.linspace(-np.pi/2, np.pi/2,500)
  • 请参阅this wiki page,了解尝试仅通过线条粗细创建平行曲线时出现的奇怪情况。一般来说,没有一种万能的解决方案可以为曲线提供直观的粗细。
  • 因为这个方程已经创建了超过 180º 的完整曲线。从 -np.pi/2 开始让曲线从左下点开始,该点曲线最平滑。起点和终点会使曲线的显示方式有些不连续,因此最好让它们远离您最感兴趣的区域。
  • 在 bean 的顶部和底部添加额外曲线的数学运算是什么?也许这样可以隐藏凹凸。
  • 我试过ax.fill(np.r_[x * 1.01, x[::-1] * 0.95], np.r_[y * 1.01, y[::-1] * 0.95], c=(1, 0.2, 0.5)),但由于曲线不是以 0,0 为中心,因此厚度变化很大。此外,一些凹凸只是数学曲线的一部分,因此似乎没有必要隐藏它。

标签: python numpy matplotlib graph geometry


【解决方案1】:

所以一个解决方案是使用 t = np.linspace(-np.pi/2, np.pi/2,500)ax.plot(x, y, c=(1,0.2,0.5),lw=5)

也感谢@JohanC ax.fill(np.r_[x * 1.01, x[::-1] * 0.95], np.r_[y * 1.01, y[::-1] * 0.95], c=(1, 0.2, 0.5))

设计看起来很酷,而且在我所见的范围内没有凹凸。 我将 dpi 设置为 720,这需要大约 0.5 秒来处理图像。我没有计时,这只是一个猜测。

我确定您可以降低 dpi 并使用 SciPy 插入图形,然后稍微降低 dpi,但坦率地说,我不确定如何做到这一点。我会研究一下,如果我找到一个很好的理由使用它而不是上面的解决方案,我会回来编辑这篇文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多