# Circle

Martin McBride, 2020-08-23
Tags geometry circle arc sector segment
Categories generativepy generative art

The Circle class draws circles, arcs, sectors and segments.

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

## Circle class methods

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

• as_arc
• as_sector
• as_segment

Creates a circle based on the centre point and radius.

of_center_radius(center, radius)

Parameter Type Description
center (number, number) A tuple of two numbers, giving the (x, y) position of the centre of the circle.

### as_arc

Modifies a circle, to show only an arc. An arc is part of the circumference of the circle.

as_arc(start_angle, end_angle)

Parameter Type Description
start_angle number A number, giving the start angle of the arc
end_angle number A number, giving the end angle of the arc

This is used as a modifier with of_center_radius, to draw just an arc. To draw an arc use:

Circle(ctx).of_center_radius((0, 0), 1).as_arc(0, 1).stroke(Color('black'), 0.1)


Angles are measured in radians. Angle zero lies along the positive x-axis, and the angle increases in the clockwise direction - note that this is opposite to the normal mathematical convention, where angle increases in the counterclockwise direction. The difference is due to the fact that y increases as you move down the image in generativepy.

If you are using a flipped coordinate system (see the setup function in the drawing module), the angle increases in the counterclockwise direction.

Since an arc is a line, you should normally use the stroke method to draw it. If you attempt to fill the arc, it will fill it as if it was a segment.

### as_segment

Modifies a circle, to show only a segment. An segment is the part of the circle that is cut off by a chord.

as_segment(start_angle, end_angle)


This function works in a similar way to the as_arc function, but it includes the area of the segment. You can fill or stroke the area, see the example below.

### as_sector

Modifies a circle, to show only a sector. An sector is a "pizza slice", like you would use in a pie chart,.

as_sector(start_angle, end_angle)


This function works in a similar way to the as_arc function, but it includes the area of the sector. You can fill or stroke the area, see the example below.

## circle function

Adds a circle as a new path, without the need to create a Circle object in code.

circle(ctx, center, radius)

Parameter Type Description
ctx Context The Pycairo Context to draw to
center (number, number) A tuple of two numbers, giving the (x, y) position of the centre of the circle.

The circle function doesn't allow you to create arcs, segments or sectors.

## Example

Here is some example code that draws circles 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 Circle, circle

'''
Create circles using the geometry module.
'''

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

# The circle function is a convenience function that adds a circle as a new the path.
# You can fill or stroke it as you wish.
circle(ctx, (1, 1), 0.7)
ctx.set_source_rgba(*Color(1, 0, 0))
ctx.fill()

# Circle objects can be filled, stroked, filled and stroked.
Circle(ctx).of_center_radius((2.5, 1), 0.7).fill_stroke(Color(0, 0, 1), Color(0), 0.05)
Circle(ctx).of_center_radius((4, 1), 0.7).as_arc(0, 1).stroke(Color(0, 0.5, 0), 0.05)