带插值的 Matlab 补丁函数根据顶点顺序产生不同的结果
Matlab's patch function with interpolation produces different result based on order of vertices
我有一个带有 x、y、c 坐标的补丁,如下所示。更改点的顺序后,MATLAB 的 patch
颜色插值会发生变化。
x = [0.9000 1.0000 1.0000 0.9000]';
y = [0.5000 0.5000 0.6000 0.6000]';
c = [0.0278 0.0371 0.0325 0.0282]';
figure();
patch(x,y,c);
order = [2:4,1];
figure();
patch(x(order),y(order),c(order));
以上生成了两个不同的色块。然而,坐标和颜色只是以循环的方式改变了顺序。
有什么克服这个问题的建议吗?
我认为这是因为您没有关闭补丁——如果补丁中的最后一点与第一点不同,MATLAB 会自动关闭它。显然这对颜色插值做了一些奇怪的事情。如果你稍微修改一下代码,这样你的补丁就关闭了,像这样:
figure;
order = [1:4,1];
patch(x(order),y(order),c(order));
figure;
order = [2:4,1:2];
patch(x(order),y(order),c(order));
figure;
order = [3:4,1:3];
patch(x(order),y(order),c(order));
然后你每次都会得到相同的补丁。
我有一个带有 x、y、c 坐标的补丁,如下所示。更改点的顺序后,MATLAB 的 patch
颜色插值会发生变化。
x = [0.9000 1.0000 1.0000 0.9000]';
y = [0.5000 0.5000 0.6000 0.6000]';
c = [0.0278 0.0371 0.0325 0.0282]';
figure();
patch(x,y,c);
order = [2:4,1];
figure();
patch(x(order),y(order),c(order));
以上生成了两个不同的色块。然而,坐标和颜色只是以循环的方式改变了顺序。 有什么克服这个问题的建议吗?
我认为这是因为您没有关闭补丁——如果补丁中的最后一点与第一点不同,MATLAB 会自动关闭它。显然这对颜色插值做了一些奇怪的事情。如果你稍微修改一下代码,这样你的补丁就关闭了,像这样:
figure;
order = [1:4,1];
patch(x(order),y(order),c(order));
figure;
order = [2:4,1:2];
patch(x(order),y(order),c(order));
figure;
order = [3:4,1:3];
patch(x(order),y(order),c(order));
然后你每次都会得到相同的补丁。