#pragma once #include "common_structures.hpp" class ImplicitSurface { public: virtual double operator() (double x, double y, double z) const = 0; double operator()(const Point& pt) const; Point getCenter() const { return center;} const Color& get_color() const { return color; } void set_color(const Color& _color) { color = _color; } virtual Point location_hint() const = 0; /// Compute the normal vector to the isosurface at `pt` Point normal_at(const Point& pt) const; protected: Point center; Color color; ImplicitSurface(Point _center) : center(_center) {} };