浏览器绘图方法
- 与散点图方法相同,即生成一个点网格。
y = [x_vec(:); y_vec(:)];
resolution = [500,500];
px = linspace(min(n_vec), max(n_vec), resolution(1));
py = linspace(min(y), max(y), resolution(2));
[px, py] = meshgrid(px, py);
生成一个逻辑数组,指示点是否在多边形内部,但不需要提取这些点:
in = inpolygon(px, py, N, X)
生成Z。Z的值表示曲面图使用的颜色。因此,应使用您的函数
cc
生成它。
pz = 1./(1+(exp(-py_)/(exp(-y_vec(i))-exp(-x_vec(i)))));
pz = repmat(pz',1,resolution(2));
- 将区域外的点的 Z 值设置为
NaN
,以便 MATLAB 不会绘制它们。
pz(~in) = nan;
生成一个有界的颜色映射(如果要使用完整的颜色范围,请删除)
c = jet(100);
[s,l] = bounds(pz,'all');
s = round(s*100);
l = round(l*100);
if s ~= 0
c(1:s,:) = [];
end
if l ~= 100
c(l:100,:) = [];
end
最后,绘制图表。
figure;
colormap(jet)
surf(px,py,pz,'edgecolor','none');
view(2)
随意旋转图像,看看在Z维度中的样子 - 美丽 :)
测试的完整代码:
i=50;
cc = @(xx,x,y) 1./(1+(exp(-xx)/(exp(-x)-exp(-y))));
n_vec = 2:0.1:10;
x_vec = linspace(2,10,length(n_vec));
y_vec = abs(sin(n_vec));
y = [x_vec(:); y_vec(:)];
resolution = [500,500];
px_ = linspace(min(n_vec), max(n_vec), resolution(1));
py_ = linspace(min(y), max(y), resolution(2));
[px, py] = meshgrid(px_, py_);
in = inpolygon(px, py, N, X);
pz = 1./(1+(exp(-py_)/(exp(-y_vec(i))-exp(-x_vec(i)))));
pz = repmat(pz',1,resolution(2));
pz(~in) = nan;
c = jet(100);
[s,l] = bounds(pz,'all');
s = round(s*100);
l = round(l*100);
if s ~= 0
c(1:s,:) = [];
end
if l ~= 100
c(l:100,:) = [];
end
figure;
colormap(c)
surf(px,py,pz,'edgecolor','none');
view(2)
patch
只允许在边缘的颜色值之间进行线性插值,因此无法满足您对c(x)
颜色函数的要求。 - rinkert