#pragma once #include namespace internal { // local: a sphere with center at (0, 0, 0) and radius 1 struct sphere_face_t final : subface { static constexpr uint64_t max_degree = 2; static constexpr equation_system_type eq_sys_type = equation_system_type::implicit; std::function fetch_sdf_evaluator() const override; std::function fetch_sdf_grad_evaluator() const override; // u: planar angle from x-axis to z-axis // v: polar angle from xz-plane to y-axis std::function fetch_point_by_param_evaluator() const override; std::function fetch_param_mapping_evaluator() const override; std::function fetch_curve_constraint_evaluator(parameter_u_t constraint_var_type, double u) const override; std::function fetch_curve_constraint_evaluator(parameter_v_t constraint_var_type, double v) const override; std::function fetch_solver_evaluator() const override; }; } // namespace internal namespace detail { struct sphere_surface_tag { }; } // namespace detail