Пожалуй, наиболее реалистичный вид имеют графики поверхностей, в которых имитируется освещение от точечного источника света, расположенного в заданном месте координатной системы. Графики имитируют оптические эффекты рассеивания, отражения и зеркального отражения света. Для получения таких графиков используется команда surf 1:
surfl(...) — аналогична команде surf (...), но строит график поверхности с подсветкой от источника света;
surfl (Z.S) или surfl(X,Y,Z,S) — строит графики поверхности с подсветкой от источника света, положение которого в системе декартовых координат задается вектором S=[Sx,Sy.Sz], а в системе сферических координат — вектором S=[AZ.EL];
surfl (..., 'light') — позволяет при построении задать цвет подсветки с помощью объекта Light;
surfl (..., 'cdata') — при построении имитирует эффект отражения;
surfl(X,Y,Z,S.K) — задает построение поверхности с параметрами, заданными вектором K=[ka,kd,ks.spread], где ka — коэффициент фоновой подсветки, kd — коэффициент диффузного отражения, ks — коэффициент зеркального отражения и spread — коэффициент глянцевитости;
H=surf 1 (...) — строит поверхность и возвращает дескрипторы поверхности и источников света.
По умолчанию вектор S задает углы азимута и возвышения в 45°. Используя команды cla, hold on, view(AZ,EL), surfl (...) и hold off, можно получить дополнительные возможности управления освещением. Надо полагаться на упорядочение точек в X, Y, и Z матрицах, чтобы определить внутреннюю и внешнюю стороны параметрических поверхностей. Попробуйте транспонировать матрицы и использовать surfHX' .Y' ,Z'), если вам не понравился результат работы этой команды. Для вычисления векторов нормалей поверхности surf1 требует в качестве аргументов матрицы с размером по крайней мере 3x3.
Ниже представлен пример применения команды surfl:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X. ^ 2+Y.^2+0.3);
» surfl(X,Y,Z)
» colormap(gray)
» shading interp
» colorbar
Построенная в этом примере поверхность представлена на рис. 6.29.