Some geometrical shapes and operations
# import the required shapes and structures
from pygorithm.geometry import polygon2
from pygorithm.geometry import vector2
# create a regular polygon
poly1 = polygon2.Polygon2.from_regular(5, 5)
# create a polygon from tuple (x, y) - note that the polygon must be convex
# and the points must be clockwise
poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ])
# create a polygon from vector2s.
poly3 = polygon2.Polygon2(points=[ vector2.Vector2(0, 0),
vector2.Vector2(1, 1),
vector2.Vector2(2, 0) ])
# create a polygon by rotating another polygon
poly4 = poly3.rotate(0.2)
poly5 = poly3.rotate(degrees = 30)
# check intersection
intrs, mtv = polygon2.Polygon2.find_intersection(poly1, poly2, (0, 0), (1, 0))
if intrs:
mtv_dist = mtv[0]
mtv_vec = mtv[1]
print('They intersect. The best way to push poly1 is {} units along {}'.format(mtv_dist, mtv_vec))
else:
print('No intersection')
- Structures available:
- Vector2 (vector2)
- Line2 (line2)
- AxisAlignedLine (axisall)
- Shapes available:
- Concave Polygons (polygon2)
- Rectangles (rect2)
- Algorithms available:
- Separating Axis Theorem (polygon2)
- Broad-phase (rect2)
- Extrapolated intersection (extrapolated_intersection)
.. autoclass:: pygorithm.geometry.vector2.Vector2 :members: :special-members:
.. autoclass:: pygorithm.geometry.line2.Line2 :members: :special-members:
.. autoclass:: pygorithm.geometry.axisall.AxisAlignedLine :members: :special-members:
.. autoclass:: pygorithm.geometry.polygon2.Polygon2 :members: :special-members:
.. autoclass:: pygorithm.geometry.rect2.Rect2 :members: :special-members: :private-members:
.. automodule:: pygorithm.geometry.extrapolated_intersection :members: