Procedurally generate pirate treasure maps.
Python
Switch branches/tags
Nothing to show
Clone or download
fogleman Merge pull request #3 from JaredHalpern/master
Added Cairo library wrapper Cairocffi
Latest commit b429f31 Mar 21, 2017
Permalink
Failed to load latest commit information.
.gitignore initial commit Dec 10, 2015
README.md Update README.md Dec 12, 2015
alpha_shape.py cleanup Dec 12, 2015
graph.py curvier paths Dec 11, 2015
layers.py normalize layer, removed code Dec 12, 2015
main.py added Cairo library wrapper Mar 21, 2017
poisson_disc.py initial commit Dec 10, 2015
requirements.txt added Cairo library wrapper Mar 21, 2017
xkcd.py darker grass Dec 11, 2015

README.md

Pirate Maps

Procedurally generated pirate treasure maps. X marks the spot!

Example

Dependencies

I used several excellent third party libraries...

  • cairo for rendering
  • colour for color interpolation
  • noise for simplex noise
  • Pillow for saving debug images of noise layers
  • pyhull for delaunay triangulation
  • Shapely for all kinds of 2D geometry operations

How to Run

The script will generate several random maps and save them as PNG files.

git clone https://github.com/fogleman/PirateMap.git
cd PirateMap
pip install -r requirements.txt
python main.py

How it Works

It took me a while to decide on an approach for generating the land masses. I didn't want to just generate some simplex noise, threshold it and render it. I wanted to actually compute a polygonal shape that I could do further operations on. So here's how that works...

  • generate a layer of simplex noise with several octaves, with decreasing values as the edge of the image is approached
  • fill the screen with randomly positioned points evenly spaced using the poisson disc algorithm
  • filter the poisson points to those where the corresponding noise value is above some threshold
  • take these points and compute a "concave" hull or alpha shape with them

Shapely's buffer function is used heavily for padding or cleaning up shapes.

I also wrote an xkcdify function to add some perturbations to some of the polygons, namely the different water color gradations.