#include <CGAL/Circular_arc_2.h>

Is Model for the Concepts



Circular_arc_2<CircularKernel> ca ( Circle_2<CircularKernel> c);
Constructs an arc from a full circle.

Circular_arc_2<CircularKernel> ca ( Circle_2<CircularKernel> c,
Circular_arc_point_2<CircularKernel> p,
Circular_arc_point_2<CircularKernel> q);
Constructs the circular arc supported by c, whose source is p and whose target is q when traversing the circle in counterclockwise direction.
Precondition: p and q lie on c.

Circular_arc_2<CircularKernel> ca ( Point_2<CircularKernel> p, Point_2<CircularKernel> q, Point_2<CircularKernel> r);
Constructs an arc that is supported by the circle of type Circle_2<CircularKernel> passing through the points p, q and r. The source and target are respectively p and r, when traversing the supporting circle in the counterclockwise direction. Note that, depending on the orientation of the point triple (p,q,r), q may not lie on the arc.
Precondition: p, q, and r are not collinear.

Access Functions

Circle_2<CircularKernel> ca.supporting_circle ()

Point_2<CircularKernel> () returns the center of the supporting circle.
CircularKernel::FT ca.squared_radius () returns the squared radius of the supporting circle.

A circular arc is not oriented. Still, its source and target endpoints can be defined, supposing that its supporting circle in traversed the counterclockwise direction from source to target.

ca.source ()
Circular_arc_point_2<CircularKernel> ()

When the methods source and target return the same point, then the arc is in fact a full circle.

When an arc is x-monotone, its left and right points can be accessed directly:

ca.left ()
Precondition: ca.is_x_monotone().
ca.right ()
Precondition: ca.is_x_monotone().

Bbox_2 ca.bbox () Returns a bounding box containing the arc.

Query Functions

bool ca.is_x_monotone () Tests whether the arc is x-monotone.
bool ca.is_y_monotone () Tests whether the arc is y-monotone.


bool ca1 == ca2 Test for equality. Two arcs are equal, iff their non-oriented supporting circles are equal (i.e. they have same center and same squared radius) and their endpoints are equal.

bool ca1 != ca2 Test for non-equality


istream& std::istream& is >> Circular_arc_2 & ca
ostream& std::ostream& os << Circular_arc_2 ca

See Also