Skip to main content

Python package for constructing and handling geometric objects

Project description

Gemmini

Pypi Python pytest

Python package for visualizing and manipulating diverse geometric shapes.

Demo 1 Demo 2

Gemmini provides 70+ geometry classes including common polygons, curves, and symbols. Built with numpy and matplotlib packages, it supports easy manipulation and illustration of geometry, while plenty of useful functions for mathematical analysis and 2D/3D transformation are also available.

Geometries supported by Gemmini

Pointset

  • Point
  • Pointcloud
  • Grid

Line

  • Line
  • Segment

Polygon

  • RegularPolygon
  • IsoscelesTriangle
  • RightTriangle
  • Parallelogram
  • Rhombus
  • Trapezoid
  • RightTrapezoid
  • Rectangle
  • Kite
  • ConcaveKite
  • ConcaveStar

Curve

  • Circle
  • Arc
  • Ellipse
  • Spiral
  • HyperbolicSpiral
  • ParabolicSpiral
  • LituusSpiral
  • LogarithmicSpiral
  • BoundedSpiral
  • Cycloid
  • Epicycloid
  • Hypocycloid
  • CurvedPolygon
  • Lissajous
  • Folium
  • Bifolium

Other shapes

  • CircularSector
  • CircularSegment
  • Wave
  • Helix
  • Parabola
  • SymmetricSpiral
  • Star
  • Heart
  • ButterFly
  • CottonCandy
  • Boomerang
  • Stellate
  • Shuriken
  • Flower_A
  • Flower_B
  • Flower_C
  • Flower_D
  • Flower_E
  • Flower_F
  • Clover
  • FattyStar
  • Moon
  • Yinyang
  • Polygontile
  • Gear
  • SnippedRect
  • RoundedRect
  • Plaque
  • Ring
  • BlockArc
  • Cross_A
  • Cross_B
  • Cross_C
  • SunCross
  • CelticCross
  • BasqueCross
  • Lshape
  • HalfFrame
  • Arrow
  • DoubleArrow
  • ArrowPentagon
  • ArrowChevron
  • Teardrop
  • Nosign

Transformation

import gemmini as gm

f = gm.SunCross(s=9)
gm.plot((f), fill=True)

f.shatter((2, 4), rate=2)
gm.plot((f), fill=True)
gm.plot((f), show_area=True)

Demo 3

List of transformations

  • Resizing - scale, scaleX, scaleY
  • Position Shift - translate, translateX, translateY
  • Rotation - rotate, rotateX, rotateY, rotateZ, rotate3D
  • Symmetric Shift - flip, flipX, flipY, flipXY, flipDiagonal
  • Distortion - skew, skewX, skewY, distort, focus, shatter
  • Others - dot

Figure Visualization

Create a Canvas, on which your nice geometries will be drawn. Make a choice of color theme (default: light), canvas size, grid opacity, etc. You can plot either a single geometric object or multiple shapes altogether.

import gemmini as gm
import numpy as np

canva = gm.Canvas()

cluster_small = gm.Pointcloud2D(s=0.05, num_dot=10)
cluster_medium = gm.Pointcloud2D(s=0.1, num_dot=20)
cluster_large = gm.Pointcloud2D(s=0.2, num_dot=50)

canva.add((cluster_small, cluster_medium, cluster_large), show_center=True)
canva.plot()

Demo 4

Display Options

  • fill - fill in the interior of the geometry
  • show_edges - draw path enclosing the given geometry
  • show_radius - display a radius vector and its length
  • show_size - display a height/width of the geometry
  • show_center - display (x, y) coordinates of the centroid
  • show_area - display the area of the geometry
  • show_class - display the class name ot the geometry
import gemmini as gm

canva = gm.Canvas(theme='horizon')

original = gm.IsoscelesTriangle(h=4, w=6)
figs = []

for i in range(6):
    f = original.copy()
    f.translate(8*(i%3), 8*(i//3))
    figs.append(f)

canva.add(figs[0], fill=True)
canva.add(figs[1], show_edges=True)
canva.add(figs[2], show_center=True)
canva.add(figs[3], show_radius=True)
canva.add(figs[4], show_size=True)
canva.add(figs[5], show_area=True)

canva.plot()

Demo 5

Requirements

  • Python >= 3.7
  • numpy >= 1.21
  • scipy >= 1.7
  • matplotlib >= 3.3

Work with Shapely

We added the simple way to convert geometry to a shapely object.

import gemmini as gm

from shapely import geometry
import matplotlib.pyplot as plt

f = gm.Polygontile(s=4, v=5)
poly = geometry.Polygon(*f.coordSet())
print(poly.wkt)

POLYGON ((0.8980559531591708 1.2360679774997896, 0.9597258534760096 1.4258684144441638, ... ))

from shapely.plotting import plot_polygon

plot_polygon(poly)

Shapely

Tutorials

The below page links contain several useful tutorials running on Ipython:

Contribution

If you'd like a new shape, transformation, or other mathematical operations to be included, feel free to leave a issue on this repo. We are welcome to any kinds of request and feedbacks!

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

gemmini-1.0.2.tar.gz (51.2 kB view details)

Uploaded Source

File details

Details for the file gemmini-1.0.2.tar.gz.

File metadata

  • Download URL: gemmini-1.0.2.tar.gz
  • Upload date:
  • Size: 51.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for gemmini-1.0.2.tar.gz
Algorithm Hash digest
SHA256 564326b173b262acd77ca43e0b797a42cb6ec0fba1f8fe39b739ebbe0404db72
MD5 c0fe5bc7ebeb5b0e2fbe4cf64f5fb5f3
BLAKE2b-256 6aa9bf8d39bf1b899ace6ec76347a709e3dbac580406876a4a120f8d26d3dbf4

See more details on using hashes here.

Supported by

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