酷代码 AI
菜单

```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(12, 10)) ax = fig.add_subplot(111, projection='3d') # 玫瑰花瓣参数方程 u = np.linspace(0, 2*np.pi, 100) v = np.linspace(0, np.pi, 50) U, V = np.meshgrid(u, v) # 冰晶玫瑰核心结构 R = 1 + 0.3*np.cos(5*U) # 5瓣玫瑰 X = R * np.sin(V) * np.cos(U) Y = R * np.sin(V) * np.sin(U) Z = R * np.cos(V) # 添加冰晶细节 ice_factor = 0.2 * np.sin(8*U) * np.sin(4*V) X += ice_factor * np.sin(V) * np.cos(U) Y

代码整体逻辑清晰,实现了一个冰晶玫瑰的3D可视化效果。不过可以从以下几个方面进行优化: 优化点 1. 模块化代码:将生成冰晶玫瑰的核心逻辑封装成函数,提高代码的可读性和可维护性。 2. 减少重复计算:部分计算可以提前进行,避免重复计算。 3. 添加增加更多注释,提高代码的可读性。 优化后的代码 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.colors import LightSource def generate_ice_rose(): # 玫瑰花瓣参数方程 u = np.linspace(0, 2*np.pi, 100) v = np.linspace(0, np.pi, 50) U, V = np.meshgrid(u, v) # 冰晶玫瑰核心结构 R = 1 + 0.3*np.cos(5*U) # 5瓣玫瑰 sin_v = np.sin(V) cos_v = np.cos(V) cos_U = np.cos(U) sin_U = np.sin(U) X = R * sin_v * cos_U Y = R * sin_v * sin_U Z = R * cos_v # 添加冰晶细节 ice_factor = 0.2 * np.sin(8*U) * np.sin(4*V) X += ice_factor * sin_v * cos_U Y += ice_factor * sin_v * sin_U Z += ice_factor * cos_v return X, Y, Z def main(): fig = plt.figure(figsize=(12, 10)) ax = fig.add_subplot(111, projection='3d') # 生成冰晶玫瑰的坐标 X, Y, Z = generate_ice_rose() # 创建蓝色冰晶材质效果 light = LightSource(azdeg=315, altdeg=45) blue_ice = light.shade(Z, plt.cm.Blues_r, vert_exag=0.2) # 绘制3D表面 surface = ax.plot_surface(X, Y, Z, facecolors=blue_ice, rstride=1, cstride=1, alpha=0.8, linewidth=0, antialiased=True) # 添加冰晶闪光点 np.random.seed(42) for _ in range(50): i, j = np.random.randint(0, 49, 2) ax.scatter(X[i,j], Y[i,j], Z[i,j], color='cyan', s=20, alpha=0.6) # 设置蓝色冰晶视觉效果 ax.set_facecolor('midnightblue') ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False # 调整视角和显示 ax.view_init(elev=25, azim=45) ax.set_box_aspect([1,1,1]) plt.axis('off') plt.tight_layout() plt.show() if __name__ == "__main__": main() ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 在使用`np.meshgrid`生成网格时,要注意`u`和`v`的取值范围和数量,不同的取值会影响最终图形的精度和效果。 2. 当添加冰晶闪光点时,随机数的种子设置会影响闪光点的分布,如果需要可复现的结果,要注意种子的设置。 3. 在调整视角时,`ax.view_init`的`elev`和`azim`参数会直接影响图形的显示效果,需要多次尝试找到合适的视角。 [2025-12-12 23:16:19 | AI写代码神器 | 897点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多