Implementation of an algorithm for a polygon decomposition by Hert, S. and Lumelsky, V., 1998
Project description
pode
Summary
pode is a Python library that implements an algorithm of
Hert, S. and Lumelsky, V., 1998
for a polygon decomposition into separate parts depending on the area
requirements.
Main features are
- all calculations are robust for floating point numbers
& precise for integral numbers (like
int) - support for partition of convex/nonconvex polygons with/without holes
- support for anchored partition, free partition, and a mixture of both where anchored polygon partition requires the resulting polygon parts to contain specified points called "anchors" or "sites", and free partition does not have any constraints on the resulting geometries.
- most of the code is covered with property-based tests.
In what follows
pythonis an alias forpython3.8or any later version (python3.9and so on).
Installation
Install the latest pip & setuptools packages versions:
python -m pip install --upgrade pip setuptools
User
Download and install the latest stable version from PyPI repository:
python -m pip install --upgrade pode
Developer
Download the latest version from GitHub repository
git clone https://github.com/LostFan123/pode.git
cd pode
Install dependencies:
poetry install
Usage
>>> from pode import divide, Contour, Point, Polygon, Requirement
>>> contour = Contour([Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)])
>>> polygon = Polygon(contour)
>>> requirements = [Requirement(0.5), Requirement(0.5, point=Point(1, 1))]
>>> parts = divide(polygon, requirements)
>>> parts[0].area == parts[1].area < polygon.area
True
>>> Point(1, 1) in parts[1]
True
Currently, the algorithm uses constrained Delaunay triangulation to form convex
parts which are used internally for a convex-polygon partition.
This triangulation, however, affects the resulting partition. The resulting
parts can have zigzag pattern separating different parts. In this way, the
solution can be far from being optimal in sense of the number of sides of the
resulting polygons. Alternatively, we implemented a helper function that would
join neighboring triangles if they form a larger convex part. It can be
imported as from pode import joined_constrained_delaunay_triangles and used
as divide(polygon, requirements, joined_constrained_delaunay_triangles). But,
in the future, a better algorithm should be implemented, like
Greene, D.H., 1983
or Chazelle, B. and Dobkin, D., 1979.
Development
Bumping version
Preparation
Install bump-my-version.
Pre-release
Choose which version number category to bump following semver specification.
Test bumping version
bump-my-version bump --dry-run --verbose $CATEGORY
where $CATEGORY is the target version number category name, possible
values are patch/minor/major.
Bump version
bump-my-version bump --verbose $CATEGORY
This will set version to major.minor.patch-alpha.
Release
Test bumping version
bump-my-version bump --dry-run --verbose release
Bump version
bump-my-version bump --verbose release
This will set version to major.minor.patch.
Notes
To avoid inconsistency between branches and pull requests,
bumping version should be merged into master branch
as separate pull request.
Running tests
Plain:
pytest
Inside Docker container:
docker-compose --file docker-compose.cpython.yml up
Bash script (e.g. can be used in Git hooks):
./run-tests.sh
or
./run-tests.sh cpython
PowerShell script (e.g. can be used in Git hooks):
.\run-tests.ps1
or
.\run-tests.ps1 cpython
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pode-0.4.3.tar.gz.
File metadata
- Download URL: pode-0.4.3.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1acb7a542430f4be33185aecf283b5171ec81974dc35ddfbd53243ef4d0582c1
|
|
| MD5 |
8278af8e83e0baaa6e97b703b3dbf2f8
|
|
| BLAKE2b-256 |
3c90403796db72674d8c7eac9fb16183e2ba4faa80c38ef5a9253bc15aa32b3a
|
File details
Details for the file pode-0.4.3-py3-none-any.whl.
File metadata
- Download URL: pode-0.4.3-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dd20a17f6caf96d0c6a72b9166d7edba408c8f58333df093bbb357ac867392a
|
|
| MD5 |
6ae41311c7d7fce06e7469adf7ebebaa
|
|
| BLAKE2b-256 |
a5e8ad9c959a63de63727540ce2da470d91e5d065e8ec7cdbe9f7ed3b8618d19
|