4

この PDFをベースとして使用して、独自のアルゴリズムをモデル化すると、論文の地質学的/地熱侵食がうまく機能します。

kr=0.25
ke=0.8
ks=1.5
kc=0.1

for(i=0;i<size[argument0];i+=1)
{  
    for(j=0;j<size[argument0];j+=1)
    {
        water[i,j]=random(1)
        sediment[i,j]=0
        altitude[i,j]=ds_grid_get(argument0,i,j)+water[i,j]
    }
}

repeat(10)
{
    for(i=0;i<size[argument0];i+=1)
    {  
        for(j=0;j<size[argument0];j+=1)
        {
            ds_grid_set(argument0,i,j,ds_grid_get(argument0,i,j)-ks*water[i,j])

            if i!=0 && j!=0 && i!=size[argument0]-1 && j!=size[argument0]-1
            {
                water[i,j]=water[i,j]+kr
                altitude[i,j]=ds_grid_get(argument0,i,j)+water[i,j]
                sediment[i,j]=sediment[i,j]+ks*water[i,j]

                dtotal=0
                if altitude[i,j]-altitude[i+1,j]>0 then dtotal+=altitude[i,j]-altitude[i+1,j]
                if altitude[i,j]-altitude[i-1,j]>0 then dtotal+=altitude[i,j]-altitude[i-1,j]
                if altitude[i,j]-altitude[i,j+1]>0 then dtotal+=altitude[i,j]-altitude[i,j+1]
                if altitude[i,j]-altitude[i,j-1]>0 then dtotal+=altitude[i,j]-altitude[i,j-1]

                delta_a=altitude[i,j]-mean(altitude[i+1,j],altitude[i-1,j],altitude[i,j+1],altitude[i,j-1])
                if delta_a<0 then delta_a=0

                if dtotal>0
                {
                    for(k=0;k<4;k+=1;)
                    {
                        delta_w=0
                        delta_s=0
                        if k=0 then di=altitude[i,j]-altitude[i+1,j]
                        if k=1 then di=altitude[i,j]-altitude[i-1,j]
                        if k=2 then di=altitude[i,j]-altitude[i,j+1]
                        if k=3 then di=altitude[i,j]-altitude[i,j-1]

                        if k=0 && di>0 && water[i,j]>0
                        {
                            delta_w=min(water[i,j],delta_a)*di/dtotal
                            delta_s=sediment[i,j]*delta_w/water[i,j]
                            water[i+1,j]+=delta_w
                            sediment[i+1,j]+=delta_s
                        }
                        if k=1 && di>0 && water[i,j]>0
                        {
                            delta_w=min(water[i,j],delta_a)*di/dtotal
                            delta_s=sediment[i,j]*delta_w/water[i,j]
                            water[i-1,j]+=delta_w
                            sediment[i-1,j]+=delta_s
                        }
                        if k=2 && di>0 && water[i,j]>0
                        {
                            delta_w=min(water[i,j],delta_a)*di/dtotal
                            delta_s=sediment[i,j]*delta_w/water[i,j]
                            water[i,j+1]+=delta_w
                            sediment[i,j+1]+=delta_s

                        }
                        if k=3 && di>0 && water[i,j]>0
                        {
                            delta_w=min(water[i,j],delta_a)*di/dtotal
                            delta_s=sediment[i,j]*delta_w/water[i,j]
                            water[i,j-1]+=delta_w
                            sediment[i,j-1]+=delta_s
                        }

                        if delta_w!=0 && delta_s!=0 && water[i,j]!=0
                        {
                            water[i,j]-=delta_w
                            sediment[i,j]-=delta_s
                        }
                    }
                }

            }
            water[i,j]*=ke
            m_max=kc*water[i,j]
            delta_m=max(0,sediment[i,j]-m_max)

            sediment[i,j]=sediment[i,j]-delta_m
            ds_grid_set(argument0,i,j,ds_grid_get(argument0,i,j)+delta_m)
        }
    }
}

しかし、私が望むややフラクタルな尾根と線は返されません。私はその概念を理解しており、何度か経験しましたが、何が問題なのかわかりません。浸食前後の画像、2D および 3D: http://imgur.com/a/Svppv

4

0 に答える 0