Library of Assembled Shared Sources
lass::prim::Parallelogram3D< T > Class Template Reference

A very simple 3D polygon :) More...

#include <parallelogram_3d.h>

Inheritance diagram for lass::prim::Parallelogram3D< T >:

Public Member Functions

 Parallelogram3D ()
 constructs an empty parallelogram.
 
 Parallelogram3D (const TPoint &support, const TVector &sizeX, const TVector &sizeY)
 Constructs a parallelogram with a support and two sizes.
 
const TValue squaredArea () const
 returns squared area of parallelogram to avoid the square root.
 
const TValue area () const
 return area of the polygons surface.
 
const TValue perimeter () const
 return sum of the lengths of all edges
 
bool isSimple () const
 return true if polygon is simple, false if not.
 
bool isConvex () const
 return true if polygon is convex, false if not.
 
bool isReflex (int indexOfVertex) const
 return true if inner angle of vertex is reflex (is > 180 degrees).
 

Related Symbols

(Note that these are not member symbols.)

template<typename T, class NP, class PP>
Result intersect (const Parallelogram3D< T > &parallelogram, const Ray3D< T, NP, PP > &ray, T &u, T &v, T &t, const T &tMin=T())
 Find the intersection of a ray and a parallelogram by their parameter t on the ray and it's coordinates (u,v) on the parallelogram.
 
template<typename T, class NP, class PP>
Result intersect (const Parallelogram3D< T > &parallelogram, const Ray3D< T, NP, PP > &ray, T &t, const T &tMin=T())
 Find the intersection of a ray and a parallelogram by their parameter t on the ray.
 

Detailed Description

template<typename T>
class lass::prim::Parallelogram3D< T >

A very simple 3D polygon :)

Author
Bram de Greve [BdG]

Definition at line 63 of file parallelogram_3d.h.

Constructor & Destructor Documentation

◆ Parallelogram3D()

template<typename T>
lass::prim::Parallelogram3D< T >::Parallelogram3D ( )

constructs an empty parallelogram.

support is origin and sizes are zero.

Definition at line 61 of file parallelogram_3d.inl.

Member Function Documentation

◆ squaredArea()

template<typename T>
const Parallelogram3D< T >::TValue lass::prim::Parallelogram3D< T >::squaredArea ( ) const

returns squared area of parallelogram to avoid the square root.

Returns
num::sqr(area()) but faster :)

Definition at line 147 of file parallelogram_3d.inl.

Referenced by area().

◆ area()

template<typename T>
const Parallelogram3D< T >::TValue lass::prim::Parallelogram3D< T >::area ( ) const

return area of the polygons surface.

The area of a surface is the amount of material needed to "cover" it completely, Eric W. Weisstein. "Area." From MathWorld–A Wolfram Web Resource. http://mathworld.wolfram.com/Area.html

Definition at line 158 of file parallelogram_3d.inl.

References squaredArea().

◆ perimeter()

template<typename T>
const Parallelogram3D< T >::TValue lass::prim::Parallelogram3D< T >::perimeter ( ) const

return sum of the lengths of all edges

Definition at line 169 of file parallelogram_3d.inl.

◆ isSimple()

template<typename T>
bool lass::prim::Parallelogram3D< T >::isSimple ( ) const

return true if polygon is simple, false if not.

A polygon P is said to be simple (or Jordan) if the only points of the plane belonging to two polygon edges of P are the polygon vertices of P. Such a polygon has a well defined interior and exterior. Simple polygons are topologically equivalent to a disk., Eric W. Weisstein. "Simple Polygon." From MathWorld–A Wolfram Web Resource. http://mathworld.wolfram.com/SimplePolygon.html

In 3D, we test if the 2D mapping on the major axis is simple.

Warning
this is a brute force test. we simple test for all edges if they are not intersecting Hence, this is O(n^2).
Parallelogram specific:
A parallelogram is always simple

Definition at line 212 of file parallelogram_3d.inl.

◆ isConvex()

template<typename T>
bool lass::prim::Parallelogram3D< T >::isConvex ( ) const

return true if polygon is convex, false if not.

Warning
assumes polygon is simple

A planar polygon is convex if it contains all the line segments connecting any pair of its points. Thus, for example, a regular pentagon is convex, while an indented pentagon is not. A planar polygon that is not convex is said to be a concave polygon, Eric W. Weisstein. "Convex Polygon." From MathWorld–A Wolfram Web Resource. http://mathworld.wolfram.com/ConvexPolygon.html

A simple polygon is convex if all the cross products of adjacent edges will be the same sign (we ignore zero signs, only + or - are taken in account), a concave polygon will have a mixture of cross product signs.

A polygon with less than three vertices is always convex. A polygon with all colinear vertices is considered convex (not very usefull maybe, but convex).

Parallelogram specific:
A parallelogram is always convex

Definition at line 224 of file parallelogram_3d.inl.

◆ isReflex()

template<typename T>
bool lass::prim::Parallelogram3D< T >::isReflex ( int indexOfVertex) const

return true if inner angle of vertex is reflex (is > 180 degrees).

Warning
assumes polygon is simple
Parallelogram specific:
A parallelogram never has reflex vertices

Definition at line 236 of file parallelogram_3d.inl.

Friends And Related Symbol Documentation

◆ intersect() [1/2]

template<typename T, class NP, class PP>
Result intersect ( const Parallelogram3D< T > & parallelogram,
const Ray3D< T, NP, PP > & ray,
T & u,
T & v,
T & t,
const T & tMin = T() )
related

Find the intersection of a ray and a parallelogram by their parameter t on the ray and it's coordinates (u,v) on the parallelogram.

A maximum of two possible intersections with t > 0.

Parameters
parallelogram[in] the parallelogram
ray[in] the ray
oU[out] the parameter of the intersection point on the parallelogram.
oV[out] the parameter of the intersection point on the parallelogram.
t[out] the parameter of the intersection point > tMin.
tMin[in] the minimum t that may be returned as valid intersection.
Returns
  • rNone: no intersections with t > tMin found. t is not assigned.
  • rOne: a intersection with t > tMin is found. t is assigned.
Algorithm, based on ray/triangle intersection from:

Definition at line 79 of file parallelogram_3d_ray_3d.h.

◆ intersect() [2/2]

template<typename T, class NP, class PP>
Result intersect ( const Parallelogram3D< T > & parallelogram,
const Ray3D< T, NP, PP > & ray,
T & t,
const T & tMin = T() )
related

Find the intersection of a ray and a parallelogram by their parameter t on the ray.

A maximum of two possible intersections with t > 0.

Parameters
parallelogram[in] the parallelogram
ray[in] the ray
t[out] the parameter of the intersection point > tMin.
tMin[in] the minimum t that may be returned as valid intersection.
Returns
  • rNone no intersections with t > tMin found t is not assigned.
  • rOne a intersection with t > tMin is found t is assigned.

Definition at line 141 of file parallelogram_3d_ray_3d.h.


The documentation for this class was generated from the following files: