带插值的 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));

然后你每次都会得到相同的补丁。