39 lines
870 B
C++
39 lines
870 B
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) {}
|
|
|
|
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;
|
|
}
|
|
|
|
static const interval empty, universe;
|
|
};
|
|
|
|
const interval interval::empty = interval(+infinity, -infinity);
|
|
const interval interval::universe = interval(-infinity, +infinity);
|
|
|
|
#endif |