mirror of https://github.com/CGAL/cgal
384 lines
7.1 KiB
C++
384 lines
7.1 KiB
C++
|
|
/*!
|
|
\ingroup PkgCircularKernel3GeometricConcepts
|
|
\cgalConcept
|
|
|
|
\cgalRefines `Kernel`
|
|
|
|
\cgalHasModel `CGAL::Spherical_kernel_3<Kernel,AlgebraicKernelForSpheres>`
|
|
\cgalHasModel CGAL::Exact_spherical_kernel_3
|
|
|
|
\sa `Kernel`
|
|
|
|
*/
|
|
|
|
class SphericalKernel {
|
|
public:
|
|
|
|
/// \name Types
|
|
/// A model of `SphericalKernel` must provide some basic
|
|
/// types
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `Kernel`.
|
|
*/
|
|
typedef unspecified_type Linear_kernel;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres`.
|
|
*/
|
|
typedef unspecified_type Algebraic_kernel;
|
|
|
|
/*!
|
|
Model of `RootOf_2`.
|
|
*/
|
|
typedef unspecified_type Root_of_2;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres::RootForSpheres_2_3`.
|
|
*/
|
|
typedef unspecified_type Root_for_spheres_2_3;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres::Polynomial_1_3`.
|
|
*/
|
|
typedef unspecified_type Polynomial_1_3;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres::PolynomialsForLines_3`.
|
|
*/
|
|
typedef unspecified_type Polynomials_for_line_3;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres::PolynomialForSpheres_2_3`.
|
|
*/
|
|
typedef unspecified_type Polynomial_for_spheres_2_3;
|
|
|
|
/*!
|
|
Model of `AlgebraicKernelForSpheres::PolynomialsForCircles_3`.
|
|
*/
|
|
typedef unspecified_type Polynomials_for_circle_3;
|
|
|
|
/// @}
|
|
|
|
/// \name
|
|
/// and to define the following geometric objects
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `Kernel::Point_3`.
|
|
*/
|
|
typedef unspecified_type Point_3;
|
|
|
|
/*!
|
|
Model of `Kernel::Vector_3`.
|
|
*/
|
|
typedef unspecified_type Vector_3;
|
|
|
|
/*!
|
|
Model of `Kernel::Line_3`.
|
|
*/
|
|
typedef unspecified_type Line_3;
|
|
|
|
/*!
|
|
Model of `Kernel::Plane_3`.
|
|
*/
|
|
typedef unspecified_type Plane_3;
|
|
|
|
/*!
|
|
Model of `Kernel::Sphere_3`.
|
|
*/
|
|
typedef unspecified_type Sphere_3;
|
|
|
|
/*!
|
|
Model of `Kernel::Circle_3`.
|
|
*/
|
|
typedef unspecified_type Circle_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::LineArc_3`.
|
|
*/
|
|
typedef unspecified_type Line_arc_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CircularArc_3`.
|
|
*/
|
|
typedef unspecified_type Circular_arc_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CircularArcPoint_3`.
|
|
*/
|
|
typedef unspecified_type Circular_arc_point_3;
|
|
|
|
/// @}
|
|
|
|
|
|
/// \name Predicates
|
|
/// Moreover, a model of `SphericalKernel` must provide predicates,
|
|
/// constructions and other functionalities.
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareX_3`.
|
|
*/
|
|
typedef unspecified_type Compare_x_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareY_3`.
|
|
*/
|
|
typedef unspecified_type Compare_y_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareZ_3`.
|
|
*/
|
|
typedef unspecified_type Compare_z_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareXY_3`.
|
|
*/
|
|
typedef unspecified_type Compare_xy_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareXYZ_3`.
|
|
*/
|
|
typedef unspecified_type Compare_xyz_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareTheta_3`.
|
|
*/
|
|
typedef unspecified_type Compare_theta_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareThetaZ_3`.
|
|
*/
|
|
typedef unspecified_type Compare_theta_z_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareZAtTheta_3`.
|
|
*/
|
|
typedef unspecified_type Compare_z_at_theta_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::CompareZToRight_3`.
|
|
*/
|
|
typedef unspecified_type Compare_z_to_right_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::Equal_3`.
|
|
*/
|
|
typedef unspecified_type Equal_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::HasOn_3`.
|
|
*/
|
|
typedef unspecified_type Has_on_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::DoOverlap_3`.
|
|
*/
|
|
typedef unspecified_type Do_overlap_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::DoIntersect_3`.
|
|
*/
|
|
typedef unspecified_type Do_intersect_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::BoundedSide_3`.
|
|
*/
|
|
typedef unspecified_type Bounded_side_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::HasOnBoundedSide_3`.
|
|
*/
|
|
typedef unspecified_type Has_on_bounded_side_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::HasOnUnboundedSide_3`.
|
|
*/
|
|
typedef unspecified_type Has_on_unbounded_side_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::IsThetaMonotone_3`.
|
|
*/
|
|
typedef unspecified_type Is_theta_monotone_3;
|
|
|
|
/// @}
|
|
|
|
/// \name Constructions
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructLine_3`.
|
|
*/
|
|
typedef unspecified_type Construct_line_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructPlane_3`.
|
|
*/
|
|
typedef unspecified_type Construct_plane_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructSphere_3`.
|
|
*/
|
|
typedef unspecified_type Construct_sphere_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircle_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circle_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructLineArc_3`.
|
|
*/
|
|
typedef unspecified_type Construct_line_arc_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularArc_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_arc_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularArcPoint_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_arc_point_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularMinVertex_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_min_vertex_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularMaxVertex_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_max_vertex_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularSourceVertex_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_source_vertex_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructCircularTargetVertex_3`.
|
|
*/
|
|
typedef unspecified_type Construct_circular_target_vertex_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ConstructBbox_3`.
|
|
*/
|
|
typedef unspecified_type Construct_bbox_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::Intersect_3`.
|
|
*/
|
|
typedef unspecified_type Intersect_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::Split_3`.
|
|
*/
|
|
typedef unspecified_type Split_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::MakeThetaMonotone_3`.
|
|
*/
|
|
typedef unspecified_type Make_theta_monotone_3;
|
|
|
|
/// @}
|
|
|
|
/// \name Computations
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ComputeCircularX_3`.
|
|
*/
|
|
typedef unspecified_type Compute_circular_x_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ComputeCircularY_3`.
|
|
*/
|
|
typedef unspecified_type Compute_circular_y_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ComputeCircularZ_3`.
|
|
*/
|
|
typedef unspecified_type Compute_circular_z_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ComputeApproximateSquaredLength_3`.
|
|
*/
|
|
typedef unspecified_type Compute_approximate_squared_length_3;
|
|
|
|
/*!
|
|
Model of `SphericalKernel::ComputeApproximateAngle_3`.
|
|
*/
|
|
typedef unspecified_type Compute_approximate_angle_3;
|
|
|
|
/// @}
|
|
|
|
/// \name Link with the algebraic kernel
|
|
/// @{
|
|
|
|
/*!
|
|
Model of `SphericalKernel::GetEquation`.
|
|
*/
|
|
typedef unspecified_type Get_equation;
|
|
|
|
/// @}
|
|
|
|
/// \name Operations
|
|
/// As in the `Kernel` concept, for each of the function objects
|
|
/// above, there must exist a member function that requires no
|
|
/// arguments and returns an instance of that function object. The
|
|
/// name of the member function is the uncapitalized name of the type
|
|
/// returned with the suffix `_object` appended. For example, for the
|
|
/// function object `SphericalKernel::Construct_circular_arc_3` the
|
|
/// following member function must exist:
|
|
/// @{
|
|
|
|
/*!
|
|
|
|
*/
|
|
Construct_circular_arc_3 construct_circular_arc_3_object() const;
|
|
|
|
/// @}
|
|
|
|
/// \name Operations on a given sphere,
|
|
/// A <I>context</I> sphere must be provided to the following functions:
|
|
/// @{
|
|
|
|
/*!
|
|
|
|
*/
|
|
Compare_theta_3 compare_theta_3_object(const Sphere_3& sphere) const;
|
|
|
|
/*!
|
|
|
|
*/
|
|
Compare_theta_z_3 compare_theta_z_3_object(const Sphere_3& sphere) const;
|
|
|
|
/*!
|
|
|
|
*/
|
|
Compare_z_at_theta_3 compare_z_at_theta_3_object(const Sphere_3& sphere) const;
|
|
|
|
/*!
|
|
|
|
*/
|
|
Compare_z_to_right_3 compare_z_to_right_3_object(const Sphere_3& sphere) const;
|
|
|
|
/*!
|
|
|
|
*/
|
|
Make_theta_monotone_3 make_theta_monotone_3_object(const Sphere_3& sphere) const;
|
|
|
|
/*!
|
|
|
|
*/
|
|
Is_theta_monotone_3 is_theta_monotone_3_object(const Sphere_3& sphere) const;
|
|
|
|
/// @}
|
|
|
|
}; /* end SphericalKernel */
|
|
|