### Navigation

- index
- modules |
- next |
- previous |
- 2D Graphics »

# Polygons

class `sage.plot.polygon.``Polygon`(xdata, ydata, options)

  Bases: `sage.plot.primitive.GraphicPrimitive_xydata`

  Primitive class for the Polygon graphics type. For information on actual plotting, please see `polygon()`, `polygon2d()`, or `polygon3d()`.

  INPUT:

  - xdata - list of \(x\)-coordinates of points defining Polygon
  - ydata - list of \(y\)-coordinates of points defining Polygon
  - options - dict of valid plot options to pass to constructor

  EXAMPLES:

  Note this should normally be used indirectly via `polygon()`:

      sage: from sage.plot.polygon import Polygon
      sage: P = Polygon([1,2,3],[2,3,2],{'alpha':.5})
      sage: P
      Polygon defined by 3 points
      sage: P.options()['alpha']
      0.500000000000000
      sage: P.ydata
      [2, 3, 2]

  TESTS:

  We test creating polygons:

      sage: polygon([(0,0), (1,1), (0,1)])
      Graphics object consisting of 1 graphics primitive

      sage: polygon([(0,0,1), (1,1,1), (2,0,1)])
      Graphics3d Object

  `plot3d`(z=0, **kwds)

    Plots a 2D polygon in 3D, with default height zero.

    INPUT:

    - `z` - optional 3D height above \(xy\)-plane, or a list of heights corresponding to the list of 2D polygon points.

    EXAMPLES:

    A pentagon:

        sage: polygon([(cos(t), sin(t)) for t in srange(0, 2*pi, 2*pi/5)]).plot3d()
        Graphics3d Object

    Showing behavior of the optional parameter z:

        sage: P = polygon([(0,0), (1,2), (0,1), (-1,2)])
        sage: p = P[0]; p
        Polygon defined by 4 points
        sage: q = p.plot3d()
        sage: q.obj_repr(q.testing_render_params())[2]
        ['v 0 0 0', 'v 1 2 0', 'v 0 1 0', 'v -1 2 0']
        sage: r = p.plot3d(z=3)
        sage: r.obj_repr(r.testing_render_params())[2]
        ['v 0 0 3', 'v 1 2 3', 'v 0 1 3', 'v -1 2 3']
        sage: s = p.plot3d(z=[0,1,2,3])
        sage: s.obj_repr(s.testing_render_params())[2]
        ['v 0 0 0', 'v 1 2 1', 'v 0 1 2', 'v -1 2 3']

    TESTS:

    Heights passed as a list should have same length as number of points:

        sage: P = polygon([(0,0), (1,2), (0,1), (-1,2)])
        sage: p = P[0]
        sage: q = p.plot3d(z=[2,-2])
        Traceback (most recent call last):
        ...
        ValueError: Incorrect number of heights given

`sage.plot.polygon.``polygon`(points, **options)

  Returns either a 2-dimensional or 3-dimensional polygon depending on value of points.

  For information regarding additional arguments, see either `polygon2d()` or `polygon3d()`. Options may be found and set using the dictionaries `polygon2d.options` and `polygon3d.options`.

  EXAMPLES:

      sage: polygon([(0,0), (1,1), (0,1)])
      Graphics object consisting of 1 graphics primitive
      sage: polygon([(0,0,1), (1,1,1), (2,0,1)])
      Graphics3d Object

  Extra options will get passed on to show(), as long as they are valid:

      sage: polygon([(0,0), (1,1), (0,1)], axes=False)
      Graphics object consisting of 1 graphics primitive
      sage: polygon([(0,0), (1,1), (0,1)]).show(axes=False) # These are equivalent

`sage.plot.polygon.``polygon2d`(points, edgecolor=None, legend_color=None, rgbcolor=(0, 0, 1), thickness=None, aspect_ratio=1.0, alpha=1, legend_label=None, fill=True, **options)

  Returns a 2-dimensional polygon defined by `points`.

  Type `polygon2d.options` for a dictionary of the default options for polygons. You can change this to change the defaults for all future polygons. Use `polygon2d.reset()` to reset to the default options.

  EXAMPLES:

  We create a purple-ish polygon:

      sage: polygon2d([[1,2], [5,6], [5,0]], rgbcolor=(1,0,1))
      Graphics object consisting of 1 graphics primitive

  By default, polygons are filled in, but we can make them without a fill as well:

      sage: polygon2d([[1,2], [5,6], [5,0]], fill=False)
      Graphics object consisting of 1 graphics primitive

  In either case, the thickness of the border can be controlled:

      sage: polygon2d([[1,2], [5,6], [5,0]], fill=False, thickness=4, color='orange')
      Graphics object consisting of 1 graphics primitive

  For filled polygons, one can use different colors for the border and the interior as follows:

      sage: L = [[0,0]]+[[i/100, 1.1+cos(i/20)] for i in range(100)]+[[1,0]]
      sage: polygon2d(L, color="limegreen", edgecolor="black", axes=False)
      Graphics object consisting of 1 graphics primitive

  Some modern art – a random polygon, with legend:

      sage: v = [(randrange(-5,5), randrange(-5,5)) for _ in range(10)]
      sage: polygon2d(v, legend_label='some form')
      Graphics object consisting of 1 graphics primitive

  A purple hexagon:

      sage: L = [[cos(pi*i/3),sin(pi*i/3)] for i in range(6)]
      sage: polygon2d(L, rgbcolor=(1,0,1))
      Graphics object consisting of 1 graphics primitive

  A green deltoid:

      sage: L = [[-1+cos(pi*i/100)*(1+cos(pi*i/100)),2*sin(pi*i/100)*(1-cos(pi*i/100))] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(1/8,3/4,1/2))
      Graphics object consisting of 1 graphics primitive

  A blue hypotrochoid:

      sage: L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(1/8,1/4,1/2))
      Graphics object consisting of 1 graphics primitive

  Another one:

      sage: n = 4; h = 5; b = 2
      sage: L = [[n*cos(pi*i/100)+h*cos((n/b)*pi*i/100),n*sin(pi*i/100)-h*sin((n/b)*pi*i/100)] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(1/8,1/4,3/4))
      Graphics object consisting of 1 graphics primitive

  A purple epicycloid:

      sage: m = 9; b = 1
      sage: L = [[m*cos(pi*i/100)+b*cos((m/b)*pi*i/100),m*sin(pi*i/100)-b*sin((m/b)*pi*i/100)] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(7/8,1/4,3/4))
      Graphics object consisting of 1 graphics primitive

  A brown astroid:

      sage: L = [[cos(pi*i/100)^3,sin(pi*i/100)^3] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(3/4,1/4,1/4))
      Graphics object consisting of 1 graphics primitive

  And, my favorite, a greenish blob:

      sage: L = [[cos(pi*i/100)*(1+cos(pi*i/50)), sin(pi*i/100)*(1+sin(pi*i/50))] for i in range(200)]
      sage: polygon2d(L, rgbcolor=(1/8, 3/4, 1/2))
      Graphics object consisting of 1 graphics primitive

  This one is for my wife:

      sage: L = [[sin(pi*i/100)+sin(pi*i/50),-(1+cos(pi*i/100)+cos(pi*i/50))] for i in range(-100,100)]
      sage: polygon2d(L, rgbcolor=(1,1/4,1/2))
      Graphics object consisting of 1 graphics primitive

  One can do the same one with a colored legend label:

      sage: polygon2d(L, color='red', legend_label='For you!', legend_color='red')
      Graphics object consisting of 1 graphics primitive

  Polygons have a default aspect ratio of 1.0:

      sage: polygon2d([[1,2], [5,6], [5,0]]).aspect_ratio()
      1.0

  AUTHORS:

  - David Joyner (2006-04-14): the long list of examples above.

### Navigation

- index
- modules |
- next |
- previous |
- 2D Graphics »