2D and 3D computational geometry library which scales from prototyping to production
Project description
polliwog
2D and 3D computational geometry library which scales from prototyping to production.
Includes vectorized geometric operations, transforms, and primitives like planes, polygonal chains, and axis-aligned bounding boxes. Implemented in pure Python/NumPy. Lightweight and fast.
The goals of this project are:
- Keep dependencies light and deployment flexible.
- Keep the library working in current versions of Python and other tools.
- Respond to community contributoions.
- Eventually provide a complete set of functionality for this problem domain.
TODO
- Replace
_temporary.setter_property
with ??.
Features
Geometric operations, transforms, and primitives, in 2D and 3D.
The most commonly used of these are directly imported into
polliwog
.
- polliwog.Box represents an axis-aligned cuboid.
- polliwog.Plane represents a 2-D plane in 3-space (not a hyperplane).
- polliwog.Polyline represents an unconstrained polygonal chain in 3-space.
polliwog.transform
includes code for 3D transforms.
- polliwog.transform.CompositeTransform represents a composite transform using homogeneous coordinates. (Thanks avd!)
- polliwog.transform.CoordinateManager provides a convenient interface for named reference frames within a stack of transforms and projecting points from one reference frame to another.
- polliwog.transform.find_rigid_transform
finds a rotation and translation that closely transforms one set of points to
another. Its cousin
find_rigid_rotation
does the same, but only allows rotation, not translation. - polliwog.transform.rotation.rotation_from_up_and_look produces a rotation matrix that gets a mesh into the canonical reference frame from "up" and "look" vectors.
Other modules:
- polliwog.tri.barycentric provides a function for projecting a point to a triangle using barycentric coordinates.
- polliwog.segment provides functions for working with line segments in n-space.
Installation
pip install polliwog
Usage
import numpy as np
from polliwog import Polyline
# ...
Contribute
- Issue Tracker: https://github.com/lace/polliwog/issues
- Source Code: https://github.com/lace/polliwog
Pull requests welcome!
Support
If you are having issues, please let us know.
Acknowledgements
This collection was developed at Body Labs and includes a combination of code developed at Body Labs, from legacy code and significant new portions by Eric Rachlin, Alex Weiss, and Paul Melnikow. It was extracted from the Body Labs codebase and open-sourced by Alex Weiss into a library called blmath, which was subsequently forked by Paul Melnikow. This library and the 3D geometry and linear-algebra toolbelt vg were later extracted.
License
The project is licensed under the two-clause BSD license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.