104 lines
2.9 KiB
C++
104 lines
2.9 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __NGEOMETRICTOOLS__
|
|
#define __NGEOMETRICTOOLS__
|
|
|
|
|
|
#include "math/vector.h"
|
|
|
|
|
|
namespace GS {
|
|
namespace Geometric {
|
|
|
|
/// Compute 2d triangle area.
|
|
float TriArea2D(float x0, float y0, float x1, float y1, float x2, float y2);
|
|
|
|
/*!
|
|
@short Test intersection between a ray and a plane.
|
|
|
|
@param a Origin of the ray.
|
|
@param v Direction of the ray.
|
|
@param n Normal of the plane.
|
|
@param p A point on the plane.
|
|
|
|
@param t Output, the parametric 't' value of the point of
|
|
intersection.
|
|
|
|
@return False if the ray is embedded in or coplanar to the plane.
|
|
True otherwise.
|
|
*/
|
|
bool LineIntersectPlane(const Vector4 &a, const Vector4 &v, const Vector4 &n, const Vector4 &p, float &t);
|
|
|
|
/*!
|
|
@short Compute barycentric coordinates.
|
|
*/
|
|
void Barycentric(const Vector4 &a, const Vector4 &b, const Vector4 &c, const Vector4 &p, float &u, float &v, float &w);
|
|
|
|
/*!
|
|
@short Test intersection between a ray and a plane.
|
|
|
|
@param a Origin of the ray.
|
|
@param v Normalized direction of the ray.
|
|
@param c Center of the sphere.
|
|
@param r Radius of the sphere.
|
|
|
|
@param t Output, the parametric 't' value of the points of
|
|
intersection. t[0] is the closest point of
|
|
intersection to the origin of the ray.
|
|
|
|
@return False if no intersection.
|
|
*/
|
|
bool LineIntersectSphere(const Vector4 &a, const Vector4 &v, const Vector4 &c, float r, float t[2]);
|
|
|
|
/*!
|
|
@short Determine the closest points between two lines.
|
|
|
|
@param a First point on first line.
|
|
@param b Second point on first line.
|
|
@param u First point on second line.
|
|
@param v Second point on second line.
|
|
|
|
@param t Output, the parametric 't' values of the closest
|
|
points on each line. t[0] belongs to (a;b), t[1]
|
|
belongs to (u;v).
|
|
|
|
@return False if both lines are parallel.
|
|
*/
|
|
bool LineClosestPointToLine(const Vector4 &a, const Vector4 &b, const Vector4 &u, const Vector4 &v, float t[2]);
|
|
|
|
|
|
/*!
|
|
@short Determine the closest point to a line from a position in space.
|
|
|
|
@param a First point on line.
|
|
@param b Second point on line.
|
|
@param u Location.
|
|
@param i Output the closest point on line to u.
|
|
|
|
@return t Parametric position of i on the [a;b] segment.
|
|
If t < 0 or t > 1 then i lies outside the [a;b] segment.
|
|
*/
|
|
float LineClosestPoint(const Vector4 &a, const Vector4 &b, const Vector4 &u, Vector4 *p = 0);
|
|
|
|
/*!
|
|
@short Determine the closest point to a segment from a position in space.
|
|
|
|
@param a First point on segment.
|
|
@param b Second point on segment.
|
|
@param u Location.
|
|
@param i Output the closest point on segment to u.
|
|
|
|
@return t Parametric position of i on the [a;b] segment.
|
|
*/
|
|
float SegmentClosestPoint(const Vector4 &a, const Vector4 &b, const Vector4 &u, Vector4 *p = 0);
|
|
|
|
} // Geometric
|
|
} // GS
|
|
|
|
|
|
#endif // __NGEOMETRICTOOLS__
|