Wednesday, October 5, 2016

Tectonics

After a general arrangement of basic land masses has been laid out across a map, the map should be subdivided into plates.  Each plate should then be assigned a vector indicating its translational movement.
 Green and white plates have different movement vectors.
Then each pixel or cell which borders on a different plate needs to be evaluated with respect to the cells in the adjacent plate.  Based upon this evaluation, the elevation for the cell is raised, lowered, or left alone.

 Collision! Raise the elevation, like mountains.

 Spreading - depress the elevation, like in a rift valley.
 Leave elevation untouched.
A rotation force could also be considered, though it is not illustrated here.  Oceanic plates would also be involved, although only a few land plates are depicted in the top image.  Also, this generalizes not just to raster or cell based approach, as shown above, but also to grids, including non-square grids such as triangle, hex, and pentagonal grids.  In such cases the adjustments to elevation may be made to the vertices along the border, rather than to the cell itself, if desired.

Applying this logic to borders between oceanic plates can yield islands, deep sea trenches, and peninsulas (if adjacent to a land mass).  Perhaps the sum of the magnitudes of the vectors could determine how much to alter the elevation.

You may be wondering how to evaluate the cells to see if they're colliding spreading, or sliding along each other.  This can be done by treating the cells as squares (or whatever polygons are appropriate), and applying the translational (and optionally, rotational) vector to a copy of the pair of cells being evaluated.  If they overlap, collision!  This may involve some normalization or scaling of the vectors involved.

Keep in mind I'm just thinking aloud (er, via keyboard and screen and blog post).  It may be a I just port the web-based Experilous planet generator to C# and the basic land mass layouts serve as inputs to that, instead.  Although now that I think about it, Amit Patel's island generator could probably be modified to incorporate this approach.  I have partial port of that lying around somewhere. Something to consider for another day, perhaps.  For now, I should sign off and get some sleep before facing whatever new challenges work presents in the morning.