Developer Documentation
|
Classes | |
class | PlaneT |
class | QuadricT |
Typedefs | |
typedef PlaneT< float > | Planef |
typedef PlaneT< double > | Planed |
typedef QuadricT< float > | Quadricf |
Quadric using floats. | |
typedef QuadricT< double > | Quadricd |
Quadric using double. | |
Functions | |
template<typename Scalar > | |
bool | edgeConvexPolygonIntersection (std::vector< VectorT< Scalar, 3 > > _polygon_points, VectorT< Scalar, 3 > _v0, VectorT< Scalar, 3 > _v1, VectorT< Scalar, 3 > &_result) |
Get intersection point of a ray and a convex polygon. More... | |
template<class Vec > | |
Vec::value_type | distPointTriangleSquared (const Vec &_p, const Vec &_v0, const Vec &_v1, const Vec &_v2, Vec &_nearestPoint, bool _stable) |
template<typename Scalar > | |
bool | rotationOfTwoVectors (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, VectorT< Scalar, 3 > &_axis, Scalar &_angle, bool _degree=true) |
Get rotation axis and signed angle of rotation between two vectors. More... | |
template<typename Scalar > | |
bool | circumCenter (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2, const VectorT< Scalar, 3 > &_v3, VectorT< Scalar, 3 > &_result) |
return circumcenter of tetrahedron (_v0,_v1,_v2,_v3) | |
template<typename Scalar > | |
VectorT< Scalar, 3 > | perpendicular (const VectorT< Scalar, 3 > &_v) |
find a vector that's perpendicular to _v More... | |
template<typename Scalar > | |
bool | lineIntersection (const VectorT< Scalar, 2 > &_v0, const VectorT< Scalar, 2 > &_v1, const VectorT< Scalar, 2 > &_v2, const VectorT< Scalar, 2 > &_v3, Scalar &_t1, Scalar &_t2) |
intersect two line segments (_v0,_v1) and (_v2,_v3) | |
template<typename Vec > | |
bool | triangleIntersection (const Vec &_o, const Vec &_dir, const Vec &_v0, const Vec &_v1, const Vec &_v2, typename Vec::value_type &_t, typename Vec::value_type &_u, typename Vec::value_type &_v) |
Intersect a ray and a triangle. More... | |
template<typename Vec > | |
bool | axisAlignedBBIntersection (const Vec &_o, const Vec &_dir, const Vec &_bbmin, const Vec &_bbmax, typename Vec::value_type &_t0, typename Vec::value_type &_t1) |
Intersect a ray and an axis aligned bounding box. More... | |
template<typename Scalar > | |
Scalar | circumRadiusSquared (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2, const VectorT< Scalar, 3 > &_v3) |
return squared radius of circumcircle of tetrahedron (_v0,_v1,_v2,_v3) | |
template<typename Scalar > | |
Scalar | circumRadius (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2, const VectorT< Scalar, 3 > &_v3) |
return radius of circumcircle of tetrahedron (_v0,_v1,_v2,_v3) | |
template<typename Scalar > | |
Scalar | pointLineOrientation (const VectorT< Scalar, 2 > &_p, const VectorT< Scalar, 2 > &_v0, const VectorT< Scalar, 2 > &_v1) |
orientation of point _p w.r.t. line through _v0,_v1 in 2D | |
template<typename Scalar > | |
bool | isCCW (const VectorT< Scalar, 2 > &_v0, const VectorT< Scalar, 2 > &_v1, const VectorT< Scalar, 2 > &_v2) |
are 3 vertices in counterclockwise order? in 2D | |
template<typename Scalar > | |
bool | isCW (const VectorT< Scalar, 2 > &_v0, const VectorT< Scalar, 2 > &_v1, const VectorT< Scalar, 2 > &_v2) |
are 3 vertices in clockwise order? in 2D | |
bool | isNan (double x) |
Return false if x is not a number. | |
template<typename VectorT , typename ValueT > | |
ValueT | getFullangle (VectorT _vector1, VectorT _vector2, const VectorT &_normal, bool &_skip) |
template<typename ValueT > | |
ValueT | angleDist (const ValueT &angle0, const ValueT &angle1) |
template<typename ValueT > | |
ValueT | getAngle (const ValueT &_cos, const ValueT &_sin) |
template<typename ValueT > | |
ValueT | radToDeg (const ValueT &_angle) |
template<typename ValueT > | |
ValueT | degToRad (const ValueT &_angle) |
Triangle Functions 3-Dimensional | |
template<typename Scalar > | |
bool | baryCoord (const VectorT< Scalar, 3 > &_p, const VectorT< Scalar, 3 > &_u, const VectorT< Scalar, 3 > &_v, const VectorT< Scalar, 3 > &_w, VectorT< Scalar, 3 > &_result) |
template<typename Scalar > | |
bool | circumCenter (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2, VectorT< Scalar, 3 > &_result) |
return circumcenter of triangle (_v0,_v1,_v2) | |
template<typename Scalar > | |
Scalar | circumRadiusSquared (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2) |
return squared radius of circumcircle of triangle (_v0,_v1,_v2) | |
template<class VectorT > | |
int | isObtuse (const VectorT &_p0, const VectorT &_p1, const VectorT &_p2) |
template<typename Scalar > | |
bool | minSphere (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2, VectorT< Scalar, 3 > &_center, Scalar &_radius) |
construct min. enclosing sphere | |
template<typename Scalar > | |
Scalar | minRadiusSquared (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2) |
return squared radius of min. enclosing circle of triangle (_v0,_v1,_v2) | |
template<typename Scalar > | |
Scalar | minRadius (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2) |
return radius of min. enclosing circle of triangle (_v0,_v1,_v2) | |
template<typename Scalar > | |
Scalar | circumRadius (const VectorT< Scalar, 3 > &_v0, const VectorT< Scalar, 3 > &_v1, const VectorT< Scalar, 3 > &_v2) |
return radius of circumcircle of triangle (_v0,_v1,_v2) | |
Triangle Functions N-Dimensional | |
template<class Vec > | |
Vec::value_type | triangleAreaSquared (const Vec &_v0, const Vec &_v1, const Vec &_v2) |
return squared area of triangle (_v0, _v1, _v2) More... | |
template<typename Scalar , int N> | |
Scalar | aspectRatio (const VectorT< Scalar, N > &_v0, const VectorT< Scalar, N > &_v1, const VectorT< Scalar, N > &_v2) |
return aspect ratio (length/height) of triangle More... | |
template<typename Scalar , int N> | |
Scalar | roundness (const VectorT< Scalar, N > &_v0, const VectorT< Scalar, N > &_v1, const VectorT< Scalar, N > &_v2) |
return roundness of triangle: 1=equilateral, 0=colinear More... | |
template<class Vec > | |
Vec::value_type | triangleArea (const Vec &_v0, const Vec &_v1, const Vec &_v2) |
return area of triangle (_v0, _v1, _v2) More... | |
Distance Functions ( N-Dimensional ) | |
template<class Vec > | |
Vec::value_type | distPointLineSquared (const Vec &_p, const Vec &_v0, const Vec &_v1, Vec *_min_v=0) |
squared distance from point _p to line segment (_v0,_v1) More... | |
template<class Vec > | |
Vec::value_type | distPointTriangleSquared (const Vec &_p, const Vec &_v0, const Vec &_v1, const Vec &_v2, Vec &_nearestPoint) |
squared distance from point _p to triangle (_v0, _v1, _v2) | |
template<class Vec > | |
Vec::value_type | distPointTriangleSquaredStable (const Vec &_p, const Vec &_v0, const Vec &_v1, const Vec &_v2, Vec &_nearestPoint) |
squared distance from point _p to triangle (_v0, _v1, _v2) More... | |
template<typename VectorT , typename ValueT > | |
ValueT | distPointPlane (const VectorT &_porigin, const VectorT &_pnormal, const VectorT &_point) |
Checks the distance from a point to a plane. More... | |
template<class Vec > | |
Vec::value_type | distPointLine (const Vec &_p, const Vec &_v0, const Vec &_v1, Vec *_min_v=0) |
Compute distance from point to line segment. More... | |
template<class Vec > | |
Vec::value_type | distPointTriangle (const Vec &_p, const Vec &_v0, const Vec &_v1, const Vec &_v2, Vec &_nearestPoint) |
distance from point _p to triangle (_v0, _v1, _v2) | |
template<class Vec > | |
Vec::value_type | distPointTriangleStable (const Vec &_p, const Vec &_v0, const Vec &_v1, const Vec &_v2, Vec &_nearestPoint) |
distance from point _p to triangle (_v0, _v1, _v2) More... | |
Distance Functions ( 3-Dimensional ) | |
template<typename Scalar > | |
Scalar | distLineLineSquared (const VectorT< Scalar, 3 > &_v00, const VectorT< Scalar, 3 > &_v01, const VectorT< Scalar, 3 > &_v10, const VectorT< Scalar, 3 > &_v11, VectorT< Scalar, 3 > *_min_v0=0, VectorT< Scalar, 3 > *_min_v1=0, bool _fastApprox=false) |
squared distance of lines (_v00, _v01) and (_v10, _v11) | |
template<typename Scalar > | |
Scalar | distLineLine (const VectorT< Scalar, 3 > &_v00, const VectorT< Scalar, 3 > &_v01, const VectorT< Scalar, 3 > &_v10, const VectorT< Scalar, 3 > &_v11, VectorT< Scalar, 3 > *_min_v0=0, VectorT< Scalar, 3 > *_min_v1=0) |
distance of lines (_v00, _v01) and (_v10, _v11) | |
Projection Functions ( N-Dimensional ) | |
template<typename VectorT > | |
VectorT | projectToEdge (const VectorT &_start, const VectorT &_end, const VectorT &_point) |
template<typename VectorT > | |
VectorT | projectToPlane (const VectorT &_porigin, const VectorT &_pnormal, const VectorT &_point) |
projects a point to a plane More... | |
Triangle Functions (2D Only!!) | |
template<typename Scalar > | |
bool | baryCoord (const VectorT< Scalar, 2 > &_p, const VectorT< Scalar, 2 > &_u, const VectorT< Scalar, 2 > &_v, const VectorT< Scalar, 2 > &_w, VectorT< Scalar, 3 > &_result) |
return circumcenter of triangle (_v0,_v1,_v2) More... | |
template<typename Scalar > | |
bool | circumCenter (const VectorT< Scalar, 2 > &_v0, const VectorT< Scalar, 2 > &_v1, const VectorT< Scalar, 2 > &_v2, VectorT< Scalar, 2 > &_result) |
return circumcenter of triangle (_v0,_v1,_v2) More... | |
template<typename Scalar > | |
bool | isInTriangle (const VectorT< Scalar, 2 > &_p, const VectorT< Scalar, 2 > &_u, const VectorT< Scalar, 2 > &_v, const VectorT< Scalar, 2 > &_w) |
is point _p in triangle (_v0,_v1,_v2) in 2D | |
This namespace holds some geometric types as well as geometry algorithms.
|
inline |
Calculate the difference between two angles ( minimum distance )
angle0 | angle1 |
angle1 | angle2 |
Definition at line 123 of file AlgorithmsAngleT.cc.
Scalar ACG::Geometry::aspectRatio | ( | const VectorT< Scalar, N > & | _v0, |
const VectorT< Scalar, N > & | _v1, | ||
const VectorT< Scalar, N > & | _v2 | ||
) |
return aspect ratio (length/height) of triangle
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangl |
Definition at line 1266 of file Algorithms.cc.
bool ACG::Geometry::axisAlignedBBIntersection | ( | const Vec & | _o, |
const Vec & | _dir, | ||
const Vec & | _bbmin, | ||
const Vec & | _bbmax, | ||
typename Vec::value_type & | _t0, | ||
typename Vec::value_type & | _t1 | ||
) |
Intersect a ray and an axis aligned bounding box.
Computes the intersection point between a ray and an axis aligned bounding box
_o | Origin of the ray |
_dir | direction vector of the ray |
_bbmin | lower left front corner of the bounding box |
_bbmax | upper right back corner of the bounding box |
_t0 | if there was an intersection, this value marks the entry point |
_t1 | if there was an intersection, this value marks the exit point |
Definition at line 1367 of file Algorithms.cc.
bool ACG::Geometry::baryCoord | ( | const VectorT< Scalar, 3 > & | _p, |
const VectorT< Scalar, 3 > & | _u, | ||
const VectorT< Scalar, 3 > & | _v, | ||
const VectorT< Scalar, 3 > & | _w, | ||
VectorT< Scalar, 3 > & | _result | ||
) |
barycentric coord of _p w.r.t. (_u,_v,_w) in 3D _p has to lie in plane (_u,_v,_w)
Definition at line 93 of file Algorithms.cc.
bool ACG::Geometry::baryCoord | ( | const VectorT< Scalar, 2 > & | _p, |
const VectorT< Scalar, 2 > & | _u, | ||
const VectorT< Scalar, 2 > & | _v, | ||
const VectorT< Scalar, 2 > & | _w, | ||
VectorT< Scalar, 3 > & | _result | ||
) |
return circumcenter of triangle (_v0,_v1,_v2)
barycentric coord of _p w.r.t. (_u,_v,_w) in 2D
Definition at line 1183 of file Algorithms.cc.
bool ACG::Geometry::circumCenter | ( | const VectorT< Scalar, 2 > & | _v0, |
const VectorT< Scalar, 2 > & | _v1, | ||
const VectorT< Scalar, 2 > & | _v2, | ||
VectorT< Scalar, 2 > & | _result | ||
) |
return circumcenter of triangle (_v0,_v1,_v2)
barycentric coord of _p w.r.t. (_u,_v,_w) in 2D
Definition at line 1236 of file Algorithms.cc.
|
inline |
Convert angle from degree to radians
_angle | in degree |
Definition at line 162 of file AlgorithmsAngleT.cc.
Vec::value_type ACG::Geometry::distPointLine | ( | const Vec & | _p, |
const Vec & | _v0, | ||
const Vec & | _v1, | ||
Vec * | _min_v = 0 |
||
) |
Compute distance from point to line segment.
Compute the distance from a point p to a line segment and possibly return closest point on segment
_p | Point to test |
_v0 | Start of line segment |
_v1 | End of line segment |
_min_v | Pointer to vector, to get the closest point or 0 if it's not required |
Definition at line 295 of file Algorithms.hh.
Vec::value_type ACG::Geometry::distPointLineSquared | ( | const Vec & | _p, |
const Vec & | _v0, | ||
const Vec & | _v1, | ||
Vec * | _min_v = 0 |
||
) |
squared distance from point _p to line segment (_v0,_v1)
_p | Point to test |
_v0 | Start of line segment |
_v1 | End of line segment |
_min_v | Pointer to vector, to get the closest point or 0 if it's not required |
Definition at line 300 of file Algorithms.cc.
|
inline |
Checks the distance from a point to a plane.
_porigin | Planes origin |
_pnormal | Plane normal ( has to be normalized!) |
_point | point to test |
Definition at line 872 of file Algorithms.cc.
Vec::value_type ACG::Geometry::distPointTriangleSquaredStable | ( | const Vec & | _p, |
const Vec & | _v0, | ||
const Vec & | _v1, | ||
const Vec & | _v2, | ||
Vec & | _nearestPoint | ||
) |
squared distance from point _p to triangle (_v0, _v1, _v2)
In the stable version the distance to the longest edge is returned if the triangle is degenerate.
_p | point to test against triangle |
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangle |
Definition at line 476 of file Algorithms.cc.
Vec::value_type ACG::Geometry::distPointTriangleStable | ( | const Vec & | _p, |
const Vec & | _v0, | ||
const Vec & | _v1, | ||
const Vec & | _v2, | ||
Vec & | _nearestPoint | ||
) |
distance from point _p to triangle (_v0, _v1, _v2)
In the stable version the distance to the longest edge is returned if the triangle is degenerate.
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangle |
Definition at line 352 of file Algorithms.hh.
bool ACG::Geometry::edgeConvexPolygonIntersection | ( | std::vector< VectorT< Scalar, 3 > > | _polygon_points, |
VectorT< Scalar, 3 > | _v0, | ||
VectorT< Scalar, 3 > | _v1, | ||
VectorT< Scalar, 3 > & | _result | ||
) |
Get intersection point of a ray and a convex polygon.
Gets two vertices, _v0 and _v1, and a convex polygon defined by its vertices stored in _polygon_points Computes the intersection point of the ray defined by _v0 and _v1 and stores it to _result Returns true if the intersection point lies inside the polygon
_v0 | The first vertex of a ray |
_v1 | The second vertex if a ray |
_polygon_points | vector of the points bounding the polygon |
_result | contains the intersection point after the computation |
Definition at line 182 of file Algorithms.cc.
|
inline |
Calculate the correct 2D angle if cos and sin of the angle are given This function calculates based on the signs of the acos and asin of the given angles, in which quadrant the angle is and returns the full angle in radians
_cos | cos of angle |
_sin | sin of angle |
Definition at line 131 of file AlgorithmsAngleT.cc.
ValueT ACG::Geometry::getFullangle | ( | VectorT | _vector1, |
VectorT | _vector2, | ||
const VectorT & | _normal, | ||
bool & | _skip | ||
) |
Return a fully parametrized angle
_vector1 | vector pointing away from center, angle = 0 |
_vector2 | vector for which the angle should be calculated |
_normal | the normal used to compute if vector2 is left or right of vecor1 |
_skip | Flag to catch nan. If true nan occurred and value should not be used |
Definition at line 86 of file AlgorithmsAngleT.cc.
int ACG::Geometry::isObtuse | ( | const VectorT & | _p0, |
const VectorT & | _p1, | ||
const VectorT & | _p2 | ||
) |
test angles in triangle return 0 if all smaller than 90? return 1 if angle at _p0 ist greater than 90? return 2 if angle at _p1 ist greater than 90? return 3 if angle at _p2 ist greater than 90?
Definition at line 1013 of file Algorithms.cc.
VectorT< Scalar, 3 > ACG::Geometry::perpendicular | ( | const VectorT< Scalar, 3 > & | _v | ) |
find a vector that's perpendicular to _v
This function takes a vector and generates a new arbitrary vector that is perpendicular to the input vector.
_v | Input vector |
Definition at line 1162 of file Algorithms.cc.
VectorT ACG::Geometry::projectToEdge | ( | const VectorT & | _start, |
const VectorT & | _end, | ||
const VectorT & | _point | ||
) |
project one point to an edge. If its projection is not on the edge itself, the start or the endpoint is returned
_start | beginning of edge |
_end | end of the edge |
_point | point to be projected |
Definition at line 884 of file Algorithms.cc.
|
inline |
projects a point to a plane
_porigin | Planes origin |
_pnormal | Plane normal ( has to be normalized! ) |
_point | point to project |
Definition at line 904 of file Algorithms.cc.
|
inline |
Convert angle from radians to degree
_angle | in radians |
Definition at line 155 of file AlgorithmsAngleT.cc.
bool ACG::Geometry::rotationOfTwoVectors | ( | const VectorT< Scalar, 3 > & | _v0, |
const VectorT< Scalar, 3 > & | _v1, | ||
VectorT< Scalar, 3 > & | _axis, | ||
Scalar & | _angle, | ||
bool | _degree = true |
||
) |
Get rotation axis and signed angle of rotation between two vectors.
Get two vectors, _v0 and _v1, and compute rotation axis _v0 % _v1 as well the angle between _v0 and _v1. Note that the angle is always negative. We consider the rotation to be performed from _v0 to _v1. The angle is given in degree if not explicitly demanded in radiant (pass false as fifth parameter).
_v0 | The first vector |
_v1 | The second vector |
_axis | A reference to a vector in which the rotation axis is stored |
_angle | A reference to a scalar type in which the signed angle is stored ( in degree) |
_degree | Indicates whether the angle should be given in degree or radiant |
Definition at line 973 of file Algorithms.cc.
Scalar ACG::Geometry::roundness | ( | const VectorT< Scalar, N > & | _v0, |
const VectorT< Scalar, N > & | _v1, | ||
const VectorT< Scalar, N > & | _v2 | ||
) |
return roundness of triangle: 1=equilateral, 0=colinear
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangl |
Definition at line 1302 of file Algorithms.cc.
Vec::value_type ACG::Geometry::triangleArea | ( | const Vec & | _v0, |
const Vec & | _v1, | ||
const Vec & | _v2 | ||
) |
return area of triangle (_v0, _v1, _v2)
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangl |
Definition at line 602 of file Algorithms.hh.
Vec::value_type ACG::Geometry::triangleAreaSquared | ( | const Vec & | _v0, |
const Vec & | _v1, | ||
const Vec & | _v2 | ||
) |
return squared area of triangle (_v0, _v1, _v2)
_v0 | First point of triangle |
_v1 | Second point of triangle |
_v2 | Third point of triangl |
Definition at line 173 of file Algorithms.cc.
bool ACG::Geometry::triangleIntersection | ( | const Vec & | _o, |
const Vec & | _dir, | ||
const Vec & | _v0, | ||
const Vec & | _v1, | ||
const Vec & | _v2, | ||
typename Vec::value_type & | _t, | ||
typename Vec::value_type & | _u, | ||
typename Vec::value_type & | _v | ||
) |
Intersect a ray and a triangle.
Computes the intersection point between a ray and a triangle. The orientation of the triangle does not matter. The distance returned in t will be negative if the triangle is not in the direction given but in the opposite direction.
_o | origin of the ray |
_dir | direction vector of the ray |
_v0 | first point of the triangle |
_v1 | second point of the triangle |
_v2 | third point of the triangle |
_t | returned distance from the origin to the intersection, in units of _dir ( negative if before origin!) |
_u | returned first barycentric coordinate of the intersection point in the triangle |
_v | returned second barycentric coordinate of the intersection point in the triangle |
Definition at line 1317 of file Algorithms.cc.