Generate Landscape through elevation

As described in a previous German post I failed in my attempt to generate a relief landscape based on the elevation algorithm.
I revisited the issue and succeeded somewhat better.
My implementation is based on a 2 dimensional integer array. Each value designates the altitude at that point. The idea behind the algorithm is to divide the area by a random line. Each point on one side is elevated by one, all points on the other side decreased. The algorithm is simple enough. The implementation is a bit tricky.
I therefore created a helper class that is used to generate the random line and check on which side a point lies: MapUtils.java
The part that may need some explanation is how this class defines if a point is on one or the other side of the line. This is done by the method isClockwise. The line is made up by two points. When we walk from the starting point of the line to the endpoint and then to the point to be checked we do that either clockwise or counter clockwise. The direction is based on the order of the start and end point and the side of the point. Therefore we can define all points that can be walked clockwise are on the same side of the line.
The ElevationGenerator uses this class and iterates several time through the map.
The result are big areas that tend to hug corners. The following example illustrates a 30×30 map after 1000 iterations. 0 signifies negative values (or in map terms sea), X signifies positive values or land:

0 0 0 0 0 X X X X 0 0 X 0 0 0 0 0 0 0 X X X X X X X X X X X 
0 0 0 0 0 X X X X 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 
0 0 0 0 0 0 X 0 X 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X 
0 0 0 0 0 0 X X 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X 
0 0 0 0 0 X X X 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 
0 0 0 0 X 0 X X X 0 0 0 0 0 0 0 X X X X X X X X X X X X X X 
X X 0 0 0 0 X X X 0 0 0 0 0 0 X X X X X X X X X X X X X X X 
0 0 0 0 0 X X X X X X 0 0 0 0 X X X X X X X X X X X X X X X 
0 0 0 0 0 X X X X X X X 0 X X 0 0 X X X X X X X X X X X X X 
0 0 0 0 0 0 0 X X X X 0 0 0 0 0 X X X X X X X X X X X X X X 
0 0 X 0 0 0 0 0 0 X 0 0 0 0 X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 X X X 0 0 X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 X 0 0 X 0 X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 X X 0 X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 X 0 X X X X X X X X X X X X X X X X 
0 0 0 X 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 X 0 X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 X 0 X X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 X X 0 X 0 X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 X 0 X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X X 
0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X X X X X X X X 

For successful compilation of the linked sources you will also need the EBasicDirection.

Schreibe einen Kommentar