Рассмотрим следующий код MATLAB:
C = [ 0 0 0 0 0
0 1 2 1 0
0 2 4 2 0
0 1 2 1 0
0 0 0 0 0 ];
pcolor( C );
shading interp;
axis square
Обратите внимание, что C
инвариантно относительно поворота на 90 градусов. Также обратите внимание на это предложение из справки для pcolor
:
При использовании шейдинга интерполяция каждая ячейка окрашивается путем билинейной интерполяции цветов в ее четырех вершинах с использованием всех элементов C.
Однако изображение на графике выглядит следующим образом:
Обратите внимание, что изображение не остается неизменным при повороте на 90 градусов (рассмотрим, например, четыре угла). Теперь, если я не понимаю билинейную интерполяцию ужасно неправильно, это должно быть неправильно. MATLAB, кажется, интерполирует по треугольникам, что не то же самое, что билинейная интерполяция.
Есть ли способ обойти эту ошибку MATLAB и получить правильную билинейную интерполяцию? (Кроме того, что я вручную интерполирую дополнительные точки, что все равно не решит проблему, если увеличить масштаб достаточно далеко.)
surf(C); shading('interp'); view(2);
- person jodag   schedule 18.11.2017