Skip to main content

Generates random simple polygons.

Project description

license test status link to PyPI

polygenerator

Generates random simple polygons. This can be useful to test computational geometry algorithms or to generate maps.

Installation

$ pip install polygenerator

API

There are 3 functions and each returns a list of (x, y) tuples:

  • random_convex_polygon(num_points)
  • random_polygon(num_points)
  • random_star_shaped_polygon(num_points)

All polygons are generated to be counterclockwise. You can reverse the order outside if you need the points in clockwise order.

The generated polygon is made to fit the bounding box (0.0, 0.0) ... (1.0, 1.0) and you can then scale and translate it to where you need it.

Example

from polygenerator import (
    random_polygon,
    random_star_shaped_polygon,
    random_convex_polygon,
)


# these two are only for demonstration
import matplotlib.pyplot as plt
import random


def plot_polygon(polygon, out_file_name):
    plt.figure()
    plt.gca().set_aspect("equal")

    for i, (x, y) in enumerate(polygon):
        plt.text(x, y, str(i), horizontalalignment="center", verticalalignment="center")

    # just so that it is plotted as closed polygon
    polygon.append(polygon[0])

    xs, ys = zip(*polygon)
    plt.plot(xs, ys, "r-", linewidth=0.4)

    plt.savefig(out_file_name, dpi=300)
    plt.close()


# this is just so that you can reproduce the same results
random.seed(5)

polygon = random_polygon(num_points=20)

print(polygon)
# [(0.752691110661913, 0.948158571633034), (0.7790276993942304, 0.05437135270534656), ..., (0.633385213909564, 0.7365967958574935)]

plot_polygon(polygon, "random_polygon.png")

random polygon

polygon = random_star_shaped_polygon(num_points=20)
plot_polygon(polygon, "random_star_shaped_polygon.png")

random star shaped polygon

polygon = random_convex_polygon(num_points=20)
plot_polygon(polygon, "random_convex_polygon.png")

random convex polygon

Notes

  • For the generation of a concave/general polygon, algorithms with better scaling exist but this was good enough for me since for testing I did not need polygons with more than 100 points. Improvements welcome.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polygenerator-0.2.0.tar.gz (360.7 kB view details)

Uploaded Source

Built Distribution

polygenerator-0.2.0-py2.py3-none-any.whl (5.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file polygenerator-0.2.0.tar.gz.

File metadata

  • Download URL: polygenerator-0.2.0.tar.gz
  • Upload date:
  • Size: 360.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.26.0

File hashes

Hashes for polygenerator-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e48f8f47ace46faa7b3473fb0602ebd45820bfd921f685bb1ca35dbdff4ef1d6
MD5 3d47b9dadb6bfd74c1632faed546b63f
BLAKE2b-256 c5ef670c9d195be72ba5a13c93a7b9add843b3453ec96df98a75cd79a96dbb70

See more details on using hashes here.

File details

Details for the file polygenerator-0.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for polygenerator-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3a942590003ea392df1b517830c19a4a6f8bd7660261b294c5f9398d23378125
MD5 3a5f601afe95fac6b8b3d8d84e805477
BLAKE2b-256 8e4b29fb1821f87bf9cf337eb4cda04d4109db36965725241ffb181c204ef7c4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page