## ConvexHullTraits_3

### Definition

Requirements of the traits class to be used with the function convex_hull_3.

### Types

ConvexHullTraits_3::Point_3
| The point type on which the convex hull algorithm operates
ConvexHullTraits_3::Plane_3
| a 3D plane
ConvexHullTraits_3::Segment_3
| a 3D segment
ConvexHullTraits_3::Triangle_3
| a 3D triangle
ConvexHullTraits_3::Vector_3
| a 3D vector
ConvexHullTraits_3::Construct_plane_3
| Function object type that provides Plane_3 operator()(Point_3 p, Point_3 q, Point_3 r), which constructs and returns a plane passing through p, q, and r and oriented in a positive sense when seen from the positive side of the plane.
ConvexHullTraits_3::Construct_segment_3
| Function object type that provides Segment_3 operator()(Point_3 p, Point_3 q), which constructs and returns the segment with source p and target q.
ConvexHullTraits_3::Construct_triangle_3
| Function object type that provides Triangle_3 operator()(Point_3 p, Point_3 q, Point_3 r), which constructs and returns the triangle with vertices p, q, and r
ConvexHullTraits_3::Construct_vector_3
| Function object type that provides Vector_3 operator()(Point_3 p, Point_3 q), which constructs and returns the vector q-p
ConvexHullTraits_3::Equal_3
| Predicate object type that provides bool operator()(Point_3 p, Point_3 q), which determines if points p and q are equal or not
ConvexHullTraits_3::Collinear_3
| Predicate object type that provides bool operator()(Point_3 p, Point_3 q, Point_3 r), which determines if points p, q and r are collinear or not
ConvexHullTraits_3::Coplanar_3
| Predicate object type that provides bool operator()(Point_3 p, Point_3 q, Point_3 r, Point_3 s), which determines if points p, q, r, and s are coplanar or not
ConvexHullTraits_3::Has_on_positive_side_3
| Predicate object type that provides bool operator()(Plane_3 h, Point_3 q), which determines of the point q is on the positive side of the halfspace h
ConvexHullTraits_3::Less_distance_to_point_3
| Predicate object type that provides a constructor taking a single Point_3 object and bool operator()(Point_3 q, Point_3 r), which returns true iff the distance from q to p is smaller than the distance from r to p, where p is the point passed to the object at construction.
ConvexHullTraits_3::Less_signed_distance_to_plane_3
| Predicate object type that provides bool operator()(Plane_3 p, Point_3 q, Point_3 r), which returns true iff the signed distance from q to p is smaller than the signed distance from r to p

To handle the degenerate case when all points are coplanar, the following three types that are default-constructable are necessary:

ConvexHullTraits_3::Traits_xy
| A model of ConvexHullTraits_2 for points projected into the xy-plane
ConvexHullTraits_3::Traits_xz
| A model of ConvexHullTraits_2 for points projected into the xz-plane
ConvexHullTraits_3::Traits_yz
| A model of ConvexHullTraits_2 for points projected into the yz-plane

One also needs the following function object to help choose which of the above traits classes to use:

ConvexHullTraits_3::Max_coordinate_3
| Function object type that provides int operator()(Vector_3 v), which returns the index (0, 1, or 2 for x, y, or z, respectively) of the coordinate of v with maximum absolute value.

These types need not be provided when it is known that the points are not all coplanar.

### Creation

Only a copy constructor is required.

ConvexHullTraits_3 traits ( & ch);

### Operations

For each of the above function and predicate object types, Func_obj_type, a function must exist with the name func_obj_type_object that creates an instance of the function or predicate object type. For example:

Construct_plane_3 | traits.construct_plane_3_object ()

### Has Models

CGAL::Convex_hull_traits_3<R>