#include /* rand() */ #include #include "Ray.h" Ray::Ray() { } Ray::Ray(const Vector & origin, const Vector & direction) { m_origin = origin; m_direction = direction; m_direction.normalize(); } Ray Ray::randomRay() { return Ray(Vector(0, 0, 0), Vector::randomVector()); } /* * return a vector for the point at distance dist * from the ray's origin point, along its direction. */ Vector Ray::getPositionAt(double dist) const { Vector v; v[0] = m_origin[0] + dist * m_direction[0]; v[1] = m_origin[1] + dist * m_direction[1]; v[2] = m_origin[2] + dist * m_direction[2]; return v; } std::ostream & operator<<(std::ostream & out, const Ray & r) { out << "(" << r.getOrigin() << " -> " << r.getDirection() << ")"; return out; } Ray Ray::shift(double amt) { return Ray(getPositionAt(amt), m_direction); }