Skip to content

curve

18 motifs. Import them from geomotif.motifs, or build one by name with registry.create("astroid").

astroid

astroid

The four-cusped star x**(2/3) + y**(2/3) == 1.

from geomotif import save_svg
from geomotif.motifs import Astroid

motif = Astroid()
save_svg(motif.build(), "astroid.svg", width=320, height=320)
geomotif render astroid --out astroid.svg
{
  "geomotif": "1.3.1",
  "motif": "astroid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

bow

bow

The bow, x**4 == x**2*y - y**3: two loops pinched at the origin.

from geomotif import save_svg
from geomotif.motifs import BowCurve

motif = BowCurve()
save_svg(motif.build(), "bow.svg", width=320, height=320)
geomotif render bow --out bow.svg
{
  "geomotif": "1.3.1",
  "motif": "bow",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

butterfly

butterfly

Temple Fay's butterfly: twelve revolutions that draw two wings.

from geomotif import save_svg
from geomotif.motifs import Butterfly

motif = Butterfly()
save_svg(motif.build(), "butterfly.svg", width=320, height=320)
geomotif render butterfly --out butterfly.svg
{
  "geomotif": "1.3.1",
  "motif": "butterfly",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

cardioid

cardioid

The heart-shaped r = 1 + cos(theta): one circle rolled around another.

from geomotif import save_svg
from geomotif.motifs import Cardioid

motif = Cardioid()
save_svg(motif.build(), "cardioid.svg", width=320, height=320)
geomotif render cardioid --out cardioid.svg
{
  "geomotif": "1.3.1",
  "motif": "cardioid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

cassini-oval

cassini-oval

Points whose distances to two foci multiply to a constant.

from geomotif import save_svg
from geomotif.motifs import CassiniOval

motif = CassiniOval()
save_svg(motif.build(), "cassini-oval.svg", width=320, height=320)
geomotif render cassini-oval --out cassini-oval.svg
{
  "geomotif": "1.3.1",
  "motif": "cassini-oval",
  "params": {
    "resolution": null,
    "a": 70.0,
    "b": 80.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
a float 70.0
b float 80.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

cochleoid

cochleoid

The snail shell r = sin(theta) / theta, coiling in on itself.

from geomotif import save_svg
from geomotif.motifs import Cochleoid

motif = Cochleoid()
save_svg(motif.build(), "cochleoid.svg", width=320, height=320)
geomotif render cochleoid --out cochleoid.svg
{
  "geomotif": "1.3.1",
  "motif": "cochleoid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "loops": 4,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
loops int 4
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

cornoid

cornoid

The cornoid, x = cos(t)cos(2t), y = sin(t)(2 + cos(2t)).

from geomotif import save_svg
from geomotif.motifs import Cornoid

motif = Cornoid()
save_svg(motif.build(), "cornoid.svg", width=320, height=320)
geomotif render cornoid --out cornoid.svg
{
  "geomotif": "1.3.1",
  "motif": "cornoid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

cycloid

cycloid

The path of a point on a rolling wheel's rim.

from geomotif import save_svg
from geomotif.motifs import Cycloid

motif = Cycloid()
save_svg(motif.build(), "cycloid.svg", width=320, height=320)
geomotif render cycloid --out cycloid.svg
{
  "geomotif": "1.3.1",
  "motif": "cycloid",
  "params": {
    "resolution": null,
    "radius": 40.0,
    "arches": 3,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
radius float 40.0
arches int 3
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

deltoid

deltoid

The three-cusped tricuspoid, Euler's curve of 1745.

from geomotif import save_svg
from geomotif.motifs import Deltoid

motif = Deltoid()
save_svg(motif.build(), "deltoid.svg", width=320, height=320)
geomotif render deltoid --out deltoid.svg
{
  "geomotif": "1.3.1",
  "motif": "deltoid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

fish

fish

A fish, tail and all, from x = cos(t) - sin(t)**2 / sqrt(2).

from geomotif import save_svg
from geomotif.motifs import FishCurve

motif = FishCurve()
save_svg(motif.build(), "fish.svg", width=320, height=320)
geomotif render fish --out fish.svg
{
  "geomotif": "1.3.1",
  "motif": "fish",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

folium

folium

The leaf curve r = cos(theta) * (4*a*sin(theta)**2 - b).

from geomotif import save_svg
from geomotif.motifs import Folium

motif = Folium()
save_svg(motif.build(), "folium.svg", width=320, height=320)
geomotif render folium --out folium.svg
{
  "geomotif": "1.3.1",
  "motif": "folium",
  "params": {
    "resolution": null,
    "a": 100.0,
    "b": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
a float 100.0
b float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

heart

heart

A heart, in either of the two shapes that go by the name.

from geomotif import save_svg
from geomotif.motifs import Heart

motif = Heart()
save_svg(motif.build(), "heart.svg", width=320, height=320)
geomotif render heart --out heart.svg
{
  "geomotif": "1.3.1",
  "motif": "heart",
  "params": {
    "resolution": null,
    "size": 100.0,
    "form": "classic",
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
form HeartForm 'classic'
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

lemniscate

lemniscate

Bernoulli's lemniscate: the infinity symbol.

from geomotif import save_svg
from geomotif.motifs import Lemniscate

motif = Lemniscate()
save_svg(motif.build(), "lemniscate.svg", width=320, height=320)
geomotif render lemniscate --out lemniscate.svg
{
  "geomotif": "1.3.1",
  "motif": "lemniscate",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

lemniscate.gerono

lemniscate.gerono

Gerono's lemniscate: the other figure eight, x**4 = x**2 - y**2.

from geomotif import save_svg
from geomotif.motifs import LemniscateOfGerono

motif = LemniscateOfGerono()
save_svg(motif.build(), "lemniscate.gerono.svg", width=320, height=320)
geomotif render lemniscate.gerono --out lemniscate.gerono.svg
{
  "geomotif": "1.3.1",
  "motif": "lemniscate.gerono",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

limacon

limacon

Pascal's snail, r = b + a*cos(theta), inner loop and all.

from geomotif import save_svg
from geomotif.motifs import Limacon

motif = Limacon()
save_svg(motif.build(), "limacon.svg", width=320, height=320)
geomotif render limacon --out limacon.svg
{
  "geomotif": "1.3.1",
  "motif": "limacon",
  "params": {
    "resolution": null,
    "a": 100.0,
    "b": 60.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
a float 100.0
b float 60.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

nephroid

nephroid

The kidney: the two-cusped epicycloid, r = 3cos(t) - cos(3t).

from geomotif import save_svg
from geomotif.motifs import Nephroid

motif = Nephroid()
save_svg(motif.build(), "nephroid.svg", width=320, height=320)
geomotif render nephroid --out nephroid.svg
{
  "geomotif": "1.3.1",
  "motif": "nephroid",
  "params": {
    "resolution": null,
    "size": 100.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
size float 100.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

trochoid

trochoid

The path of a point fixed to a rolling wheel, on the rim or off it.

from geomotif import save_svg
from geomotif.motifs import Trochoid

motif = Trochoid()
save_svg(motif.build(), "trochoid.svg", width=320, height=320)
geomotif render trochoid --out trochoid.svg
{
  "geomotif": "1.3.1",
  "motif": "trochoid",
  "params": {
    "resolution": null,
    "radius": 40.0,
    "arm": 60.0,
    "arches": 3,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
radius float 40.0
arm float 60.0
arches int 3
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.

witch-of-agnesi

witch-of-agnesi

The witch of Agnesi: a bell curve with an exact algebraic definition.

from geomotif import save_svg
from geomotif.motifs import Witch

motif = Witch()
save_svg(motif.build(), "witch-of-agnesi.svg", width=320, height=320)
geomotif render witch-of-agnesi --out witch-of-agnesi.svg
{
  "geomotif": "1.3.1",
  "motif": "witch-of-agnesi",
  "params": {
    "resolution": null,
    "radius": 50.0,
    "extent": 3.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default Notes
radius float 50.0
extent float 3.0
center Point (0.0, 0.0)
resolution int | None None Segments per strand -- a strand gets one more point than that, so both ends are included. None (default) scales density with the winding.