#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;} /// Compute the normal vector to the isosurface at `pt` Point normal_at(const Point& pt) const; protected: Point center; ImplicitSurface(Point _center) : center(_center) {} };