35 return value >=
start && value <=
end;
40 return std::clamp(value,
start,
end);
49 Pwl(
const std::vector<Point> &points);
50 Pwl(std::vector<Point> &&points);
52 void append(
double x,
double y,
double eps = 1e-6);
54 bool empty()
const {
return points_.empty(); }
55 size_t size()
const {
return points_.size(); }
60 double eval(
double x,
int *span =
nullptr,
61 bool updateSpan =
true)
const;
63 std::pair<Pwl, bool>
inverse(
double eps = 1e-6)
const;
66 void map(std::function<
void(
double x,
double y)> f)
const;
70 std::function<
double(
double x,
double y0,
double y1)> f,
78 static void map2(
const Pwl &pwl0,
const Pwl &pwl1,
79 std::function<
void(
double x,
double y0,
double y1)> f);
80 void prepend(
double x,
double y,
double eps = 1e-6);
81 int findSpan(
double x,
int span)
const;
83 std::vector<Point> points_;
Interval range() const
Get the range of the piecewise linear function.
Definition: pwl.cpp:183
std::string toString() const
Assemble and return a string describing the piecewise linear function.
Definition: pwl.cpp:412
Pwl compose(const Pwl &other, double eps=1e-6) const
Compose two piecewise linear functions together.
Definition: pwl.cpp:286
double clamp(double value)
Clamp a value such that it is within the interval.
Definition: pwl.h:38
bool contains(double value)
Check if a given value falls within the interval.
Definition: pwl.h:33
Describe an interval in one-dimensional real space.
Definition: pwl.h:29
Interval domain() const
Get the domain of the piecewise linear function.
Definition: pwl.cpp:174
std::pair< Pwl, bool > inverse(double eps=1e-6) const
Compute the inverse function.
Definition: pwl.cpp:245
Top-level libcamera namespace.
Definition: backtrace.h:17
Describe a univariate piecewise linear function in two-dimensional real space.
Definition: pwl.h:24
double start
Start of the interval.
Definition: pwl.h:45
Pwl()
Construct an empty piecewise linear function.
Definition: pwl.cpp:101
bool empty() const
Check if the piecewise linear function is empty.
Definition: pwl.h:54
void map(std::function< void(double x, double y)> f) const
Apply function to (x, y) values at every control point.
Definition: pwl.cpp:335
double eval(double x, int *span=nullptr, bool updateSpan=true) const
Evaluate the piecewise linear function.
Definition: pwl.cpp:204
void append(double x, double y, double eps=1e-6)
Append a point to the end of the piecewise linear function.
Definition: pwl.cpp:137
double end
End of the interval.
Definition: pwl.h:45
Vector class.
Definition: vector.h:33
Interval(double _start, double _end)
Construct an interval.
Definition: pwl.h:30
size_t size() const
Retrieve the number of points in the piecewise linear function.
Definition: pwl.h:55
double length() const
Compute the length of the interval.
Definition: pwl.h:43
Pwl & operator*=(double d)
Multiply the piecewise linear function.
Definition: pwl.cpp:401
static Pwl combine(const Pwl &pwl0, const Pwl &pwl1, std::function< double(double x, double y0, double y1)> f, double eps=1e-6)
Combine two Pwls.
Definition: pwl.cpp:385