## OptimalConvexPartitionTraits_2

### Definition

Requirements of a traits class to be used with the function optimal_convex_partition_2 that computes an optimal convex partition of a polygon.

### Types

In addition to the types listed with the concept PartitionTraits_2, the following types are required:

 OptimalConvexPartitionTraits_2::Segment_2 A segment type OptimalConvexPartitionTraits_2::Ray_2 A ray type OptimalConvexPartitionTraits_2::Object_2 A general object type that can be either a point or a segment OptimalConvexPartitionTraits_2::Construct_segment_2 Function object type that provides Segment_2 operator()(Point_2 p, Point_2 q), which constructs and returns the segment defined by the points p and q. OptimalConvexPartitionTraits_2::Construct_ray_2 Function object type that provides Ray_2 operator()(Point_2 p, Point_2 q), which constructs and returns the ray from point p through point q. OptimalConvexPartitionTraits_2::Collinear_are_ordered_along_line_2 Predicate object type that determines orderings of Point_2s on a line. Must provide bool operator()(Point_2 p, Point_2 q, Point_2 r) that returns true, iff q lies between p and r and p, q, and r satisfy the precondition that they are collinear. OptimalConvexPartitionTraits_2::Are_stritcly_ordered_along_line_2 Predicate object type that determines orderings of Point_2s. Must provide bool operator()(Point_2 p, Point_2 q, Point_2 r) that returns true, iff the three points are collinear and q lies strictly between p and r. Note that false should be returned if q==p or q==r. OptimalConvexPartitionTraits_2::Intersect_2 Function object type that provides Object_2 operator()(Segment_2 s1, Segment_2 s2) that returns the intersection of two segments (which may be either a segment or a point). OptimalConvexPartitionTraits_2::Assign_2 Function object type that provides bool operator()(Segment_2 s1, Object_2 o) that returns true if o is a segment and assigns the value of o to s1; returns false otherwise.

### Creation

Only a copy constructor is required.

 OptimalConvexPartitionTraits_2 traits ( & tr);

### Operations

In addition to the functions required by PartitionTraits_2, the following functions that create instances of the above function object types must exist:

 Collinear_are_ordered_along_line_2 traits.collinear_are_ordered_along_line_2_object () Construct_segment_2 traits.construct_segment_2_object () Construct_ray_2 traits.construct_ray_2_object () Are_strictly_ordered_along_line_2 traits.are_strictly_ordered_along_line_2_object ()