Files
Raytracer/interval.h
2024-07-11 00:08:56 -04:00

58 lines
1.5 KiB
C++

#ifndef INTERVAL_H
#define INTERVAL_H
#include "rayTracer.h"
class interval {
public:
double min, max;
// Fegault interval is empty.
interval() : min(+infinity), max(-infinity) {}
interval(double min, double max) : min(min), max(max) {}
interval(const interval& a, const interval& b) {
// Create the interval tightly enclosing the two input intervals.
min = a.min <= b.min ? a.min : b.min;
max = a.max >= b.max ? a.max : b.max;
}
double size() const {
return max - min;
}
bool contains(double x) const {
return min <= x && x <= max;
}
bool surrounds(double x) const {
return min < x && x < max;
}
double clamp(double x) const {
if (x < min) return min;
if (x > max) return max;
return x;
}
interval expand(double delta) const {
auto padding = delta / 2;
return interval(min - padding, max + padding);
}
static const interval empty, universe;
};
const interval interval::empty = interval(+infinity, -infinity);
const interval interval::universe = interval(-infinity, +infinity);
interval operator+(const interval& ival, double displacement) {
return interval(ival.min + displacement, ival.max + displacement);
}
interval operator+(double displacement, const interval& ival) {
return ival + displacement;
}
#endif