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

 

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时,运行结果

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手可摘星辰0120

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值