Triangle


Martin McBride, 2020-08-26
Tags geometry triangle
Categories generativepy generative art

The Triangle class draws a triangle.

There is also a triangle function that just creates a triangle as a new path.

Triangle class methods

The Triangle class inherits add, fill, stroke, and fill_stroke from Shape.

It has additional methods:

  • of_corners

of_corners

Creates a triangle based on a set of 3 points.

of_corners(a, b, c)
Parameter Type Description
a (number, number) (x, y) tuple, giving the position of corner a of the triangle.
b (number, number) (x, y) tuple, giving the position of corner b of the triangle.
c (number, number) (x, y) tuple, giving the position of corner c of the triangle.

triangle function

Adds a triangle as a new path, without the need to create a Triangle object in code.

triangle(ctx, points, closed=True)
Parameter Type Description
ctx Context The Pycairo Context to draw to
a (number, number) (x, y) tuple, giving the position of corner a of the triangle.
b (number, number) (x, y) tuple, giving the position of corner b of the triangle.
c (number, number) (x, y) tuple, giving the position of corner c of the triangle.

Example

Here is some example code that draws triangles using the class and the utility function. The full code can be found on github.

from generativepy.drawing import make_image, setup
from generativepy.color import Color
from generativepy.geometry import triangle, Triangle

'''
Create triangles using the geometry module.
'''

def draw(ctx, width, height, frame_no, frame_count):
    setup(ctx, width, height, width=500, background=Color(0.8))

    # The triangle function is a convenience function that adds a triangle as a new path.
    # You can fill or stroke it as you wish.
    triangle(ctx, (100, 100), (150, 50), (200, 150))
    ctx.set_source_rgba(*Color(1, 0, 0))
    ctx.fill()

    Triangle(ctx).of_corners((300, 100), (300, 150), (400, 200)).stroke(Color('orange'), 10)

make_image("/tmp/geometry-triangle.png", draw, 500, 500)

Copyright (c) Axlesoft Ltd 2020