Physics Forums

Physics Forums (http://www.physicsforums.com/index.php)
-   Engineering, Comp Sci, & Technology Homework (http://www.physicsforums.com/forumdisplay.php?f=158)
-   -   Help With Pseudo Coded Algorithm for The Diamond-Square Algorithm (http://www.physicsforums.com/showthread.php?t=318796)

quddusaliquddus Jun8-09 05:14 PM

Help With Pseudo Coded Algorithm for The Diamond-Square Algorithm
 
1. The problem statement, all variables and given/known data

I am trying to write a pseudocoded recursive algorithm.

Algorithm is located @: http://gameprogrammer.com/fractal.html#diamond

I am getting the ending wrong.

2. Relevant equations

Do diamond step.
Do square step.
Reduce random number range.
Call myself four times.


[From link above]
3. The attempt at a solution

My attempt:

Quote:

Function DiamondSquare(PointsColl as Points3DCollection) Points3DCollection


'Variables

Dim SquareSize as Integer = PointColl.Length

if SquareSize > 1 then

Dim RandomRange as Integer = 5

Dim Rand as Random(1234)


'Diamond Step

Dim SqrCorner1 as Integer = 1

Dim SqrCorner2 as Integer = SquareSize

Dim SqrCorner3 as Integer = (SquareSize - 1) * SquareSize +1

Dim SqrCorner4 as Integer = SquareSize * SquareSize

Dim SqrCentre as Integer = (SquareSize / 2) ^ 2


'Assign Diamond Centre value

SqrCentreValue = PointsColl(SqrCorner1) + PointsColl(SqrCorner2) + PointsColl(SqrCorner3) + PointsColl(SqrCorner4) + Rand.Next(0, RandomRange)

PointsColl(SqrCentre) = New Point3D(PointsColl(SqrCentre).X, SqrCentreValue, PointsColl(SqrCentre).Z)


'Square Step

Dim DiamCorner1 as Integer = SquareSize/2

Dim DiamCorner2 as Integer = DiamCorner1 + SquareSize

Dim DiamCorner3 as Integer = DiamCorner2 + SquareSize

Dim DiamCorner4 as Integer = DiamCorner3 + SquareSize


'Assign Diamond Centre Values to Diamond Corners

PointsColl(DiamondCorner1) = SqrCentreValue

PointsColl(DiamondCorner2) = SqrCentreValue

PointsColl(DiamondCorner3) = SqrCentreValue

PointsColl(DiamondCorner4) = SqrCentreValue


'Split into Four Squares

Dim Square1 as Point3DCollection((SquareSize/2)-1)

Dim Square2 as Point3DCollection((SquareSize/2)-1)

Dim Square3 as Point3DCollection((SquareSize/2)-1)

Dim Square4 as Point3DCollection((SquareSize/2)-1)


'Populate Square 1
Dim Index as integer = 0

For i = 0 to (SquareSize / 2) - 1

For j = 0 to (SquareSize / 2) - 1

Square1(Index) = PointsColl((i * SquareSize) + j)

Index = Index + 1

next

next

'Populate Square 2
Dim Index as integer = 0

For i = 0 to (SquareSize / 2) - 1

For j = 0 to (SquareSize / 2) -1

Square2(Index) = PointsColl((i * SquareSize) + j + (SquareSize / 2))

Index = Index + 1

next

next

'Populate Square 3
Dim Index as integer = 0

For i = 0 to (SquareSize / 2) - 1

For j = 0 to (SquareSize / 2) - 1

Square3(Index) = PointsColl(((i + SquareSize / 2)* SquareSize) + j)

Index = Index + 1

next

next

'Populate Square 4
Dim Index as integer = 0

For i = 0 to (SquareSize / 2) - 1

For j = 0 to (SquareSize / 2) - 1

Square4(Index) = PointsColl(((i + SquareSize / 2) * SquareSize) + j + (SquareSize / 2))

Index = Index + 1

next

next


'Call function for each Quarter Square

Dim Square1 as Point3DCollection = DiamondSquare(Square1)

Dim Square2 as Point3DCollection = DiamondSquare(Square2)

Dim Square3 as Point3DCollection = DiamondSquare(Square3)

Dim Square4 as Point3DCollection = DiamondSquare(Square4)

Else

'Replace Square Values in PointsColl

'Retrieve Square1

Dim index as integer = 0

for i = 0 to (SquareSize / 2) - 1

for j = 0 to (SquareSize / 2) - 1

PointsColl((i * SquareSize) + j) = Square1(Index)

Index = Index + 1

next

next


'Retrieve Square2

Dim index as integer = 0

for i = 0 to (SquareSize / 2) - 1

for j = 0 to (SquareSize / 2) - 1

PointsColl((i * SquareSize) + j + (SquareSize / 2)) = Square1(Index)

next

next


'Retrieve Square3

Dim index as integer = 0

for i = 0 to (SquareSize / 2) - 1

for j = 0 to (SquareSize / 2) - 1

PointsColl(((i + SquareSize / 2)* SquareSize) + j) = Square1(Index)

next

next


'Retrieve Square4

Dim index as integer = 0

for i = 0 to (SquareSize / 2) - 1

for j = 0 to (SquareSize / 2) - 1

PointsColl(((i + SquareSize / 2) * SquareSize) + j + (SquareSize / 2)) = Square1(Index)

next

next


End Function
1. The problem statement, all variables and given/known data



2. Relevant equations



3. The attempt at a solution


All times are GMT -5. The time now is 01:50 AM.

Powered by vBulletin Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
© 2014 Physics Forums