# Yatoom / voronoi

An implementation of Fortune's algorithm in python
Python
Latest commit 55bc844 Jun 27, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
voronoi Jun 27, 2019
.gitignore
.travis.yml Jun 27, 2019
Pipfile
Pipfile.lock Jun 27, 2019
example.png Mar 28, 2018
example.py Nov 16, 2018
setup.cfg Mar 28, 2018
setup.py
triangle.gif Mar 28, 2018

# Voronoi

A Python implementation of Fortune's algorithm based on the description of "Computational Geometry: Algorithms and Applications" by de Berg et al. The algorithm handles the special cases described in the book. The bounding box is generalized to handle a convex polygon.

## Manual Installation

First, clone the repository and then install the package.

```git clone https://github.com/Yatoom/voronoi.git
cd voronoi
python setup.py install```

Note: you need to use `sudo python3 setup.py install` on most Linux distributions.

## Example usage

Example that uses a polygon as a bounding box.

```from voronoi import Voronoi, Polygon

# Define a set of points
points = [
(2.5, 2.5),
(4, 7.5),
(7.5, 2.5),
(6, 7.5),
(4, 4),
(3, 3),
(6, 3),
]

# Define a bounding box
polygon = Polygon([
(2.5, 10),
(5, 10),
(10, 5),
(10, 2.5),
(5, 0),
(2.5, 0),
(0, 2.5),
(0, 5),
])

# Initialize the algorithm
v = Voronoi(polygon)

# Create the diagram
v.create_diagram(points=points, vis_steps=False, verbose=False, vis_result=True, vis_tree=True)

# Get properties
edges = v.edges
vertices = v.vertices
arcs = v.arcs
points = v.points```

### Calculate the shell size for each point

```for point in v.points:
print(f"{(point.x, point.y)} \t {point.cell_size()}")```

Output:

``````(2.5, 2.5) 	 11.529761904761905
(4, 7.5) 	 15.064062500000006
(7.5, 2.5) 	 11.75
(6, 7.5) 	 10.520833333333329
(4, 4) 	     7.640625
(3, 3) 	     5.946354166666666
(6, 3) 	     9.423363095238095
``````

### Get coordinates for a point

`v.points[0].get_coordinates()`

Output:

`[(0.167, 5.333), (4.5, 1.0), (4.643, 0.0), (2.5, 0), (0, 2.5), (0, 5)]`

## Testing

To run unit tests, run the following comand.

``````python3 -m "nose" voronoi/tests/unit.py
``````
You can’t perform that action at this time.