/**
* @class Ray
*
* @Date: Created by Ray Zhang on 28/07/14.
*
* @Description
* Define a ray, ray is a line with a start point.
*/
#ifndef __UTILS_RAY__
#define __UTILS_RAY__
#include <CasualCore/CasualCore.h>
class Ray
{
public:
Ray(const RKVector begin, const RKVector direction) : m_origin(begin), m_direction(direction) {
m_direction.Normalize();
}
Ray(const Ray & rhv) : m_origin(rhv.m_origin), m_direction(rhv.m_direction) {}
Ray& operator=(const Ray& rhv) {
m_origin = rhv.m_origin;
m_direction = rhv.m_direction;
return *this;
}
const RKVector& GetOrigin() const { return m_origin; }
const RKVector& GetDirection() const { return m_direction; }
RKVector ClosestPointOnRay(const RKVector& point) const {
RKVector v = point - m_origin;
float t = v.Dot(m_direction);
return m_origin + m_direction * t;
}
private:
RKVector m_origin;
RKVector m_direction;
};
#endif // __UTILS_RAY__