可以用surflm函数制作空间单色阴影地貌图,该函数与MATLAB的surfl函数类似。使用surflm函数的效果与使用光照的效果差不多,但是函数模型是通过给曲面法向加权来获得照亮的效果,而使用光照则需要添加光对象。[大谦MATLAB,dqmatlab点com]
下面的例子用korea数据集演示了surflm函数的使用。这里使用worldmap函数设置合适的坐标和参考线。
用worldmap函数设置一种投影类型,并显示一幅朝鲜半岛的矢量地图。
>> hk=worldmap('');
>> load coastlines
>> geoshow(lat,long)
worldmap函数选择一种投影类型和地图边界来制作该地图,生成的地图如图5-1所示。
载入korea地形模型。
>> load
生成纬线和经线网格,将规则数据网格转换为地理定位网格。
>> [klat,klon]=meshgrat(map,maplegend);
用surflm函数生成一个默认的阴影地貌地图,并将颜色查找表改成单色的,如gray、bone或copper等。
>> ht=surflm(klat,klon,map);
>> colormap('copper')
默认时,光照方向是相对于视线方向逆时针5°的方向,这样,“太阳”就在东南方。现在的地图如图5-2所示。
图5-1 朝鲜半岛的矢量地图 图5-2 生成阴影地貌地图
要使光线从其他方向射过来,可以将光源的方位角和仰角作为surflm函数的第4个变量指定。清除地形图并重绘,指定方位角为135°,仰角为60°。
>> clmo(ht); ht=surflm(klat,klon,map,[135,60]);
地图表面现在更亮了,如图5-3中所示。
现在将光线转换到西北(方位角-135°),俯角40°。
>> clmo(ht); ht=surflm(klat,klon,map,[-135, 30],[.65 .4 .3 10]);
对于本例的地形来说,这个设置是一个好的选择,因为大部分山脊的走向都是从北到南,所以多少都与光线的方向平行。图5-4是最后生成的地图。
图5-3 重新指定光源后的效果 图5-4 最后生成的地图
函数meshlsrm和surflsrm通过曲面着色和光影把地图显示成阴影地貌图。可以把它们当作surflm函数的扩展,它们结合了曲面着色和曲面光照阴影的特点。用meshlsrm函数显示规则数据网格,用surflsrm函数给地理定位数据网格着色。