quddusaliquddus
Active member
- Joined
- Nov 20, 2007
- Messages
- 25
- Programming Experience
- Beginner
Hi
,
I am trying to implement an Algorithm called "Diamond-Square Algorithm" ().
I am having trouble ending it so that it retiurns the required result. So far I have the folloiwng.
I am trying to implement an Algorithm called "Diamond-Square Algorithm" ().
I am having trouble ending it so that it retiurns the required result. So far I have the folloiwng.
VB.NET:
Imports System.Windows.Media.Media3D
Imports System.Math
'http://gameprogrammer.com/fractal.html
Class Window1
Private Sub btnAddTerrain_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAddTerrain.Click
Dim PointList As New Point3DCollection
Dim Rand As New Random(1234)
For z = 0 To 3
For x = 0 To 3
PointList.Add(New Point3D(x, Rand.Next(0, 4), z))
Next
Next
Dim P As Point3DCollection = DiamondSquare(PointList, 10)
End Sub
Function DiamondSquare(ByVal PointsColl As Point3DCollection, ByVal R As Integer) As Point3DCollection
Dim SquareSize As Integer = Sqrt(PointsColl.Count)
If PointsColl.Count > 4 Then
'Variables
Dim RandomRange As Integer = R
Dim Rand As New 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
Dim SqrCentreValue As Double = PointsColl(SqrCorner1 - 1).Y + PointsColl(SqrCorner2 - 1).Y + PointsColl(SqrCorner3 - 1).Y + PointsColl(SqrCorner4 - 1).Y + 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(DiamCorner1) = New Point3D(PointsColl(DiamCorner1).X, SqrCentreValue, PointsColl(DiamCorner1).Z)
PointsColl(DiamCorner2) = New Point3D(PointsColl(DiamCorner2).X, SqrCentreValue, PointsColl(DiamCorner2).Z)
PointsColl(DiamCorner3) = New Point3D(PointsColl(DiamCorner3).X, SqrCentreValue, PointsColl(DiamCorner3).Z)
PointsColl(DiamCorner4) = New Point3D(PointsColl(DiamCorner4).X, SqrCentreValue, PointsColl(DiamCorner4).Z)
'Split into Four Squares
Dim Square1 As New Point3DCollection((SquareSize / 2) - 1) '((SquareSize/2)-1)
Dim Square2 As New Point3DCollection((SquareSize / 2) - 1) '((SquareSize/2)-1)
Dim Square3 As New Point3DCollection((SquareSize / 2) - 1) '((SquareSize/2)-1)
Dim Square4 As New Point3DCollection((SquareSize / 2) - 1) '((SquareSize/2)-1)
'Populate Square 1
For i = 0 To (SquareSize / 2) - 1
For j = 0 To (SquareSize / 2) - 1
Square1.Add(PointsColl((i * SquareSize) + j))
Next
Next
'Populate Square 2
For i = 0 To (SquareSize / 2) - 1
For j = 0 To (SquareSize / 2) - 1
Square2.Add(PointsColl((i * SquareSize) + j + (SquareSize / 2)))
Next
Next
'Populate Square 3
For i = 0 To (SquareSize / 2) - 1
For j = 0 To (SquareSize / 2) - 1
Square3.Add(PointsColl(((i + SquareSize / 2) * SquareSize) + j))
Next
Next
'Populate Square 4
For i = 0 To (SquareSize / 2) - 1
For j = 0 To (SquareSize / 2) - 1
Square4.Add(PointsColl(((i + SquareSize / 2) * SquareSize) + j + (SquareSize / 2)))
Next
Next
'Call function for each Quarter Square
Return DiamondSquare(Square1, R - 1)
Return DiamondSquare(Square2, R - 1)
Return DiamondSquare(Square3, R - 1)
Return DiamondSquare(Square4, R - 1)
Else
'Replace Square Values in PointsColl
'Retrieve Square
Dim Square As New Point3DCollection()
MessageBox.Show(PointsColl.Count / 2)
Square.Add(PointsColl(0))
Square.Add(PointsColl(1))
Square.Add(PointsColl(2))
Square.Add(PointsColl(3))
Return Square
End If
End Function
End Class