Files
TrinityCore/dep/include/g3dlite/G3D/LineSegment.h
click e777161888 HIGHLY EXPERIMENTAL - USE AT YOUR OWN RISK
Implement the use of the new vmap3-format by Lynx3d (mad props to you for this, and thanks for the talks earlier)
+ reduced Vmap size to less than one third, and improve precision
+ indoor/outdoor check which allows automatic unmounting of players
+ additional area information from WMOAreaTable.dbc, removed existing "hacks"
+ WMO liquid information for swimming and fishing correctly in buildings/cities/caves/instances (lava and slime WILL hurt from now on!)
- buildfiles for windows are not properly done, and will need to be sorted out
NOTE: Do NOT annoy Lynx3d about this, any issues with this "port" is entirely our fault !
THIS REVISION IS CONSIDERED UNSTABLE AND CONTAINS WORK IN PROGRESS - USE AT YOUR OWN RISK!

--HG--
branch : trunk
2010-06-05 00:59:25 +02:00

116 lines
2.4 KiB
C++

/**
@file LineSegment.h
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
@created 2003-02-08
@edited 2008-02-02
*/
#ifndef G3D_LINESEGMENT_H
#define G3D_LINESEGMENT_H
#include "G3D/platform.h"
#include "G3D/Vector3.h"
namespace G3D {
/**
An finite segment of an infinite 3D line.
*/
class LineSegment {
protected:
Vector3 _point;
/** Not normalized */
Vector3 direction;
LineSegment(const Vector3& __point, const Vector3& _direction) : _point(__point), direction(_direction) {
}
public:
inline LineSegment() : _point(Vector3::zero()), direction(Vector3::zero()) {}
LineSegment(class BinaryInput& b);
void serialize(class BinaryOutput& b) const;
void deserialize(class BinaryInput& b);
virtual ~LineSegment() {}
/**
* Constructs a line from two (not equal) points.
*/
static LineSegment fromTwoPoints(const Vector3 &point1, const Vector3 &point2) {
return LineSegment(point1, point2 - point1);
}
/** Call with 0 or 1 */
Vector3 point(int i) const;
inline float length() const {
return direction.magnitude();
}
/**
* Returns the closest point on the line segment to point.
*/
Vector3 closestPoint(const Vector3 &point) const;
/**
Returns the distance between point and the line
*/
double distance(const Vector3& p) const {
return (closestPoint(p) - p).magnitude();
}
double distanceSquared(const Vector3& p) const {
return (closestPoint(p) - p).squaredMagnitude();
}
/** Returns true if some part of this segment is inside the sphere */
bool intersectsSolidSphere(const class Sphere& s) const;
Vector3 randomPoint() const;
};
class LineSegment2D {
private:
Vector2 m_origin;
/** Not normalized */
Vector2 m_direction;
/** Length of m_direction */
float m_length;
public:
LineSegment2D() {}
static LineSegment2D fromTwoPoints(const Vector2& p0, const Vector2& p1);
/** Returns the intersection of these segements (including
testing endpoints), or Vector2::inf() if they do not intersect. */
Vector2 intersection(const LineSegment2D& other) const;
Vector2 point(int i) const;
Vector2 closestPoint(const Vector2& Q) const;
float distance(const Vector2& p) const;
float length() const;
};
} // namespace
#endif