 ## CGAL::Circular_arc_2<CircularKernel>

#include <CGAL/Circular_arc_2.h>

### Creation

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

 Circular_arc_2 ca ( Circle_2 c, Circular_arc_point_2 p, Circular_arc_point_2 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 ca.supporting_circle () Point_2 ca.center () 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.

 Circular_arc_point_2 ca.source () Circular_arc_point_2 ca.target ()

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:

Circular_arc_point_2<CircularKernel>
ca.left ()
 Precondition: ca.is_x_monotone().
Circular_arc_point_2<CircularKernel>
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.

### Operations

 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

### I/O

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