(1)问题分析
可以把每一座山峰用高斯函数表示,用高斯函数的幅值、中心、标准差分别表示山峰的高度、位置、形状,从而可以画出各种想要的山峰组合。
(2)问题的matlab解决代码
%绘制三维山峰图
close all;
clear;clc;
%初始化
Gauss_fun_2D=@(x_mat,y_mat,amp,pos,std)amp*...
exp(-((x_mat-pos(1)).^2+(y_mat-pos(2)).^2)/(2*std^2)); %通过匿名函数定义二维高斯函数
x_vec=-10:0.5:10; %给出画图的x范围
y_vec=(-10:0.5:10).'; %给出画图的y范围
peak1_amp=5; %设置第一个山峰的高度
peak1_pos=3*[1,-1]; %设置第一个山峰的位置
peak1_std=2; %通过高斯函数标准差设置第一个山峰的形状
peak2_amp=2; %设置第二个山峰的高度
peak2_pos=3*[-1,1]; %设置第二个山峰的位置
peak2_std=2; %通过高斯函数标准差设置第二个山峰的形状
%绘制三维山峰
x_num=length(x_vec);
y_num=length(y_vec);
x_mat=repmat(x_vec,y_num,1);
y_mat=repmat(y_vec,1,x_num);
peaks_val=Gauss_fun_2D(x_mat,y_mat,peak1_amp,peak1_pos,peak1_std)+...
Gauss_fun_2D(x_mat,y_mat,peak2_amp,peak2_pos,peak2_std);
mesh_handle=mesh(x_vec,y_vec,peaks_val);
set(mesh_handle,'EdgeColor',0.25*[1 1 1]); %设置画图的线条为浅灰色
view(-69,33); %设置方位角和仰角
axis off; %去掉坐标轴
(3)代码的运行结果截图
这本质上是个数学问题,要想获得不同峰值效果的前提,是需要有三维绘图多峰函数的具体表达式;
由于在三维中峰值和三元指数函数有关,尝试了一下根据peaks函数返回的定义式,经修改后得到的自定义函数,可获得以下类似的大致效果:
clc,clear,close all;
figure
[x,y,z] = peaks(50);
z = 5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)...
% - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
% - 1/3*exp(-(x+1).^2 - y.^2)
mesh(x,y,z)
把z中<0的值全部置为nan可仅显示z>0的部分
clc,clear,close all;
figure
[x,y,z] = peaks(50);
z = 5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)
z(z<0) = nan;
mesh(x,y,z)
并将线条置为黑色:
clc,clear,close all;
figure
[x,y,z] = peaks(50);
z = 5*(1+2*x).^2.*exp(-(x.^2) - (y+1).^2) + 20*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)
z(z<0) = nan;
s = mesh(x,y,z);
set(s,'EdgeColor',[0 0 0])
peaks函数定义式可参考官方文档:https://ww2.mathworks.cn/help/matlab/ref/peaks.html?searchHighlight=peaks&s_tid=srchtitle_peaks_1
这样行吗?
from turtle import color
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import math
x = np.arange(-3,3,0.25)
y = np.arange(-3,3,0.25)
X, Y = np.meshgrid(x, y)
Z = np.cos(Y)-np.sin(X)
fig = plt.figure("image", figsize=(10, 8))
fig.canvas.manager.window.wm_geometry('+450+50')
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,color="#d8dcd6") #平面
# ax.plot3D(np.ravel(X),np.ravel(Y),np.ravel(Z)) --3D图
plt.show()
```python
这里面的Z可以随意调换,只要清楚正余弦型函数性质即可(比如Z=1/2cos(Y+90°)-sin(X))
画什么?
您好!,可以参考:https://blog.csdn.net/weixin_57109262/article/details/123427730