2015-10-15 18:21:32 +00:00
|
|
|
#ifndef INFINITERAY_H
|
|
|
|
#define INFINITERAY_H
|
|
|
|
|
|
|
|
#include "basics_global.h"
|
|
|
|
|
|
|
|
#include "Vector3.h"
|
|
|
|
|
|
|
|
namespace paysages {
|
|
|
|
namespace basics {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Infinite ray (line).
|
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
class BASICSSHARED_EXPORT InfiniteRay {
|
|
|
|
public:
|
2015-11-09 23:15:30 +00:00
|
|
|
InfiniteRay() = default;
|
2015-10-15 18:21:32 +00:00
|
|
|
InfiniteRay(const Vector3 &origin, const Vector3 &direction);
|
|
|
|
|
|
|
|
static InfiniteRay fromPoints(const Vector3 &point1, const Vector3 &point2);
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
inline const Vector3 &getOrigin() const {
|
|
|
|
return origin;
|
|
|
|
}
|
|
|
|
inline const Vector3 &getDirection() const {
|
|
|
|
return direction;
|
|
|
|
}
|
2015-10-15 18:21:32 +00:00
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
inline double getCursor(const Vector3 &point) const {
|
|
|
|
return point.sub(origin).dotProduct(direction);
|
|
|
|
}
|
|
|
|
inline Vector3 getPointAtCursor(double distance) const {
|
|
|
|
return origin.add(direction.scale(distance));
|
|
|
|
}
|
2015-10-15 18:21:32 +00:00
|
|
|
|
|
|
|
void save(PackStream *stream) const;
|
|
|
|
void load(PackStream *stream);
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
private:
|
2015-10-15 18:21:32 +00:00
|
|
|
Vector3 origin;
|
|
|
|
Vector3 direction;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // INFINITERAY_H
|