Python绘制等离子体效果失败求助:代码运行结果不符预期
等离子体效果绘制问题修复方案
你的代码核心问题在于:
c和d是固定常数(np.cos(20)、np.sin(20)计算后是单一数值),导致z最终也是一个固定值,所以imshow只会输出纯色块,完全无法生成随坐标变化的等离子体纹理。- 等离子体效果需要基于二维坐标
x、y生成动态变化的纹理,必须让z成为x和y的函数。
修正后的基础版代码
import numpy as np import matplotlib.pyplot as plt # 生成更高分辨率的二维坐标网格 x = np.linspace(-np.pi, np.pi, 200) y = np.linspace(-np.pi, np.pi, 200) x, y = np.meshgrid(x, y) # 组合多频余弦函数生成等离子体纹理 z = np.abs(np.cos(x * 5 + y * 3)) + np.abs(np.cos(x * 2 + y * 7)) * 0.5 z = z / z.max() # 归一化到0-1区间,提升对比度 plt.imshow(z, cmap='plasma') # 用plasma色卡匹配等离子体视觉效果 plt.axis('off') plt.show()
进阶版:基于Perlin噪声的真实等离子体效果
如果想要更贴近真实等离子体的随机流动感,可以使用Perlin噪声(需先安装库:pip install noise):
import numpy as np import matplotlib.pyplot as plt import noise width, height = 200, 200 scale = 10.0 # 控制噪声的精细程度 # 生成二维Perlin噪声纹理 z = np.zeros((height, width)) for i in range(height): for j in range(width): z[i][j] = noise.pnoise2( i/scale, j/scale, octaves=3, # 噪声层级,越多纹理越复杂 persistence=0.5, # 振幅衰减系数 lacunarity=2.0, # 频率增长系数 repeatx=width, repeaty=height, base=0 ) # 归一化到0-1范围 z = (z - z.min()) / (z.max() - z.min()) plt.imshow(z, cmap='plasma') plt.axis('off') plt.show()
内容的提问来源于stack exchange,提问作者Katseku Godfred
相关产品推荐
相关产品推荐

