https://github.com/peterhellberg/karta
Experiments with map generation using Voronoi diagrams
https://github.com/peterhellberg/karta
go toy-project voronoi-diagram
Last synced: 10 months ago
JSON representation
Experiments with map generation using Voronoi diagrams
- Host: GitHub
- URL: https://github.com/peterhellberg/karta
- Owner: peterhellberg
- Created: 2014-07-29T18:52:57.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2022-11-29T16:43:01.000Z (about 3 years ago)
- Last Synced: 2025-03-25T04:13:01.322Z (11 months ago)
- Topics: go, toy-project, voronoi-diagram
- Language: Go
- Size: 126 KB
- Stars: 105
- Watchers: 9
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Karta
Just playing around with [Voronoi diagrams](http://en.wikipedia.org/wiki/Voronoi_diagram).
[](https://godoc.org/github.com/peterhellberg/karta)

The goal is to create something similar to what is described in the article
[Polygonal Map Generation for Games](http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/)
## Installation
```bash
# Basic command line tool
go install github.com/peterhellberg/karta/cmd/karta@latest
# A web server generating maps based on query parameters
go install github.com/peterhellberg/karta/cmd/karta-server@latest
```
## Development
I spend most of my time in [iTerm 2](http://iterm2.com/) and this project is no different.
This is how I preview the map in a split pane:
```bash
rerun -p "**/*.go" -c -x -b -- \
"go run cmd/karta/main.go -width 55 -height 55 && aimg -w 55 karta.png"
```

## Usage
The project includes two binaries `karta` and `karta-server`, the latter serving both PNG and JPEG.
### Command line arguments
```
Usage of karta:
-count=2048: The number of sites in the voronoi diagram
-height=512: The height of the map in pixels
-iterations=1: The number of iterations of Lloyd's algorithm to run (max 16)
-output="karta.png": Output filename
-seed=3: The starting seed for the map generator
-show=false: Show generated map using Preview.app
-width=512: The width of the map in pixels
```
### Query string parameters
- **s** - size
- **w** - width
- **h** - height
- **c** - count
- **i** - iterations
## Progress
First i just plotted out random dots:

Then drew a voroni diagram:

Found the centroids:

Ran the diagram through [Lloyd's algorithm](http://en.wikipedia.org/wiki/Lloyd%27s_algorithm):

A few iterations later:

Animating 0-16 iterations:

Started coloring the map according to the distance from the center:

Added some randomness:

Added a different types of elevation:

Removed the centroid markers:

Started working on using [Simplex noise](http://en.wikipedia.org/wiki/Simplex_noise) for
island shape and elevation:

Elevation based on noise + distance from center of map:

Tweaked noise and yellow beaches:

## License
**The MIT License (MIT)**
Copyright (C) 2014 [Peter Hellberg](https://c7.se/)
> Permission is hereby granted, free of charge, to any person obtaining
> a copy of this software and associated documentation files (the "Software"),
> to deal in the Software without restriction, including without limitation
> the rights to use, copy, modify, merge, publish, distribute, sublicense,
> and/or sell copies of the Software, and to permit persons to whom the
> Software is furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included
> in all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
> DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
> OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.