Login Register
Frontpage Code library Pastebin

DiamondSquare2D

Author: MetalRain
Added: 9. huhtikuuta 2011 kello 23.36
Edited: 15. huhtikuuta 2011 kello 22.19
Category: Algoritmi

Description

M1c:n toteuttama Diamond Square algoritmi esim. maastongenerointiin. Palauttaa muistipalan jossa korkeudet desimaalilukuna siten että siemenluvut ovat alku ja loppukorkeus. Multiplier kertoo kuinka paljon arvot voivat poiketa ja roughness käyrän tasaisuuden.

Code

Select all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function DiamondSquare2D(seed1#, seed2#, _width, roughness#, multiplier#, unset# = -12345)
    width = _width
    result = MakeMEMBlock(width * 4 + 4)
    For i = 1 To width - 1
        PokeFloat result, i * 4, unset#
    Next i
    PokeFloat result, 0, seed1#
    PokeFloat result, width * 4, seed2#
    stp = width / 2
    While stp => 1
        b = stp
        While b < width
            If PeekFloat(result, b * 4) = unset# Then
                PokeFloat result, b * 4, (PeekFloat(result, (b - stp) * 4) + PeekFloat(result, (b + stp) * 4)) / 2 + Rnd(-roughness#, roughness#)
            EndIf
            b = b + stp
        Wend
        stp = stp / 2
        roughness# = roughness# * multiplier#
    Wend
    Return result
End Function

Comments

No comments. You can be first!

Leave a comment

You must be logged in to comment.