菱形—方形构网法(Diamond-Square)

菱形—方形构网法(Diamond-Square)_第1张图片

 

import numpy
#参数设置,只需设置五个参数初值
num=2 #迭代次数
a00=1 #四个角点的初值
a01=1
a10=1
a11=1
#设置以上五个参数
#################################
#设置迭代次数
n=num
#迭代步长初始化
pw=[]
pw.append(1)
for i in range(1,n+1,+1):
    pw.append(pw[i-1]*2)
#数组元素初始化
a=numpy.zeros((pw[n]+1,pw[n]+1))
#设置正方形地形四个角的高程值
a[0][0]=a00
a[0][pw[n]]=a01
a[pw[n]][0]=a10
a[pw[n]][pw[n]]=a11
#迭代Diamond-Square交替进行
for i in range(n,0,-1):#迭代次数控制
    for j in range(0,pw[n],pw[i]):#开始Diamond步骤
        for k in range(0,pw[n],pw[i]):
            x=j+pw[i-1]#计算中点坐标X
            y=k+pw[i-1]#计算中点坐标Y
            a[x][y]=a[j][k]+a[j+pw[i]][k]+a[j][k+pw[i]]+a[j+pw[i]][k+pw[i]]#已知四个角点,计算中间点数值
    flag=True #控制Square步骤中,迭代初始位置
    for j in range(0,pw[n]+1,pw[i-1]): #开始Square步骤
        for k in range(flag*pw[i-1],pw[n]+1,pw[i]):
            if (j-pw[i-1]>=0): #判断是否超出左边界
                a[j][k]+=a[j-pw[i-1]][k]
            if (j+pw[i-1]<=pw[n]): #判断是否超出右边界
                a[j][k] += a[j+pw[i-1]][k]
            if (k-pw[i-1]>=0): #判断是否超出上边界
                a[j][k] += a[j][k-pw[i-1]]
            if (k+pw[i-1]<=pw[n]): #判断是否超出下边界
                a[j][k] += a[j][k+pw[i-1]]
        flag= not flag #交换迭代初始位置
#最终结果输出
print(a)

n=1时,运行结果

 n=2时,运行结果

菱形—方形构网法(Diamond-Square)_第2张图片

 

你可能感兴趣的:(numpy,python,开发语言)