如何用含x、y的方程生成类谷歌3D图,x和y应如何计算取值
3D绘图x、y取值设置方法
x、y的取值不需要额外计算,你可以根据目标函数的特征和你想要展示的效果主动定义采样规则,具体逻辑如下:
- 确定取值区间
首先匹配函数的有效定义域,同时覆盖你想要观察的特征区域即可:
比如你示例中的sin(sqrt(x**2 + y**2))属于全实数域有效函数,要观察环形波纹特征的话,取x、y的区间都为[-10, 10]就可以满足展示需求;如果是带限制条件的函数比如sqrt(x**2 + y**2 - 4),就要把x、y的区间设置在满足x**2 + y**2 ≥4的范围,避免计算报错。 - 设置采样密度
取值区间确定后,在区间内均匀取采样点即可,采样点数量通常设置在50~200区间:
采样点太少会导致生成的3D曲面锯齿感明显、特征展示不全,采样点太多会大幅增加计算和渲染负担,没有特殊需求的话x、y各取100个采样点完全够用。 - 生成网格坐标
单独的x、y采样结果是一维数组,需要转换为二维网格矩阵才能代入表达式计算z值,如果你用Python实现的话直接调用np.meshgrid(x采样数组, y采样数组)即可,输出的两个二维矩阵就是所有需要参与z值计算的x、y坐标对。
以下是对应你示例的Python实现参考代码:
import numpy as np import matplotlib.pyplot as plt # 定义x、y取值区间和采样点数量 x = np.linspace(-10, 10, 100) y = np.linspace(-10, 10, 100) # 生成网格坐标 X, Y = np.meshgrid(x, y) # 代入表达式计算z值 Z = np.sin(np.sqrt(X**2 + Y**2)) # 绘制3D图 fig = plt.figure() ax = fig.add_subplot(projection='3d') ax.plot_surface(X, Y, Z) plt.show()
内容的提问来源于stack exchange,提问作者Itzsten
相关产品推荐
相关产品推荐

