- 积分
- 55946
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2020-4-11 10:29 编辑
这个例子演示了2维水平格点场的旋转。脚本主要有以下几个步骤:
1、用arange()函数创建格点长的经纬度坐标,再用meshgrid()函数将lon, lat数组变为2维,此时创建的格点场是东西、南北方向的“正矩形”。
2、旋转格点场:利用了矩阵旋转方法(具体可以网上搜索了解)。
2.1 构建一个包含旋转角度正、余玄的2*2矩阵(也就是2维数组)。
2.2 创建一个包含所有格点经纬度坐标的矩阵(xy = zeros([n, 2]),并将经纬度值赋入。由于是希望格点场以左下角为中心旋转,构建的矩阵的左下角要平移到(0, 0)。
2.3 利用矩阵乘积函数dot()将2.1和2.2中构建的两个矩阵相乘即可得到旋转后的矩阵。旋转后的矩阵需要进行和2.2中相反方向的平移。
脚本程序:
- #Plot
- axesm(tickfontsize=12)
- geoshow('country')
- #Original matrix
- lat = arange(10, 41, 5)
- lon = arange(70, 131, 5)
- lon, lat = meshgrid(lon, lat)
- scatterm(lon, lat, facecolor='b', size=8, edge=False)
- #Rotate matrix
- angle = 20 * pi / 180
- rotate = array([[cos(angle),sin(angle)], [-sin(angle),cos(angle)]])
- n = lon.size
- xy = zeros([n, 2])
- xy[:,0] = lon - 70
- xy[:,1] = lat - 10
- xy = dot(xy, rotate) #Matrix multiplication
- xy[:,0] = xy[:,0] + 70
- xy[:,1] = xy[:,1] + 10
- scatterm(xy[:,0], xy[:,1], facecolor='r', size=8, edge=False)
- xticks(arange(0, 361, 10))
- yticks(arange(-90, 91, 10))
- title('Matrix rotate sample')
- xlim(50, 150)
- ylim(0, 70)
|
|