| 
    SOFUS ..
    
   | 
 
Single Purpose Solutions. A number of lighweight additions to C and/or C++. More...
Namespaces | |
| namespace | nix | 
| namespace | win32 | 
Classes | |
| struct | bbox_t | 
| Bounding box.  More... | |
| struct | circle_t | 
| struct | element_circular_t | 
| struct | element_rect_t | 
| Element representation.  More... | |
| struct | ellipsis_t | 
| struct | euler_t | 
| Euler angles.  More... | |
| struct | mat3_t | 
| class | msignal1D | 
| struct | point_t | 
| Point type (aligned)  More... | |
| struct | rect_t | 
| Rectangle.  More... | |
Typedefs | |
| typedef enum sps::RotationConvention | RotationConvention | 
| template<typename T > | |
| using | vector_t = point_t< T > | 
| Vector aliased as point.  More... | |
Enumerations | |
| enum | RotationConvention { EulerIntrinsicZYZ = 0x00 , EulerIntrinsicYXY = 0x01 } | 
Functions | |
| template<typename I , typename J > | |
| std::pair< I, J > | minmax_weighted_element (I begin, I end, J it) | 
| template<typename T , typename U > | |
| std::pair< T, T > | minmax_delay (const T *xs, const U *ws, size_t nData) | 
| template<class T > | |
| T | dist_point_to_point (const point_t< T > &a, const point_t< T > &b) | 
| template<typename T > | |
| T | dot (const point_t< T > &a, const point_t< T > &b) | 
| template<typename T > | |
| point_t< T > | operator- (const point_t< T > &a, const point_t< T > &b) | 
| template<typename T > | |
| point_t< T > | operator+ (const point_t< T > &a, const point_t< T > &b) | 
| template<typename T > | |
| point_t< T > | cross (const point_t< T > &a, const point_t< T > &b) | 
| template<typename T > | |
| point_t< T > | operator* (const T &a, const point_t< T > &b) | 
| template<typename T > | |
| T | norm (const point_t< T > &a) | 
| template<typename T > | |
| T | dist_point_to_line (const point_t< T > &point, const point_t< T > &pointOnLine, const point_t< T > &direction) | 
| template<typename T > | |
| T | sgn_dist_to_plane (const point_t< T > &point, const point_t< T > &pointOnPlane, const point_t< T > &unitNormal) | 
| template<typename T > | |
| T | dist_point_to_circle (const point_t< T > &point, const circle_t< T > &circle) | 
| template<typename T > | |
| void | dist_point_to_circle_local (const point_t< T > &point, const circle_t< T > &circle, T *r, T *z, T *distNear) | 
| template<typename T > | |
| void | dist_point_to_circle_local (const point_t< T > &point, const circle_t< T > &circle, T *r, T *z, T *distNear, T *distFar) | 
| template<typename T > | |
| sps::point_t< T > | clamp_vector (const sps::point_t< T > &point, const sps::bbox_t< T > &box) | 
| template<typename T > | |
| void | compute_bounding_box3 (const T *pos, const size_t nPos, sps::bbox_t< T > *box) | 
| template<typename T > | |
| bool | point_inside_box (const sps::point_t< T > &point, const sps::bbox_t< T > &box) | 
| template<typename T > | |
| sps::point_t< T > | nearest_point_on_bbox (const sps::point_t< T > &point, const sps::bbox_t< T > &box) | 
| template<typename T > | |
| sps::point_t< T > | farthest_point_on_bbox (const sps::point_t< T > &point, const sps::bbox_t< T > &box) | 
| template<typename T > | |
| void | dists_most_distant_and_closest (const sps::bbox_t< T > &box0, const sps::bbox_t< T > &box1, T *distNear, T *distFar) | 
| template<typename T , RotationConvention conv> | |
| void | basis_vectors (sps::point_t< T > *output, const sps::euler_t< T > &euler, size_t index) | 
| template<typename T , RotationConvention conv> | |
| void | euler2rot (const sps::euler_t< T > &euler, sps::mat3_t< T > *mat) | 
| template<typename T , RotationConvention conv> | |
| void | rot2euler (const sps::mat3_t< T > &rot, euler_t< T > *euler) | 
| template<typename T , RotationConvention conv> | |
| void | basis_rotate (const sps::point_t< T > &input, const euler_t< T > &euler, sps::point_t< T > *output) | 
| template<typename T > | |
| void | basis_vectors (T *vec0, T *vec1, T *vec2, const sps::euler_t< T > &euler) | 
| template<typename T > | |
| std::ostream & | operator<< (std::ostream &out, const point_t< T > &point) | 
| template<typename T > | |
| std::ostream & | operator<< (std::ostream &out, const mat3_t< T > &mat) | 
| template<typename T > | |
| void | compute_bounding_box_circle (const sps::circle_t< T > &circle, sps::bbox_t< T > *box) | 
| template<typename T > | |
| void | arc_point_ellipsis (const sps::ellipsis_t< T > &ellipsis, const T &arc, sps::point_t< T > *point) | 
| template<typename T > | |
| void | tan_point_ellipsis (const sps::ellipsis_t< T > &ellipsis, const T &y, const T &x, sps::point_t< T > *point) | 
| template<typename T > | |
| void | intcp_line_rect (const sps::element_rect_t< T > &rect, const T &y, const T &x, sps::point_t< T > *point) | 
Single Purpose Solutions. A number of lighweight additions to C and/or C++.
| typedef enum sps::RotationConvention RotationConvention | 
| enum RotationConvention | 
| void arc_point_ellipsis | ( | const sps::ellipsis_t< T > & | ellipsis, | 
| const T & | arc, | ||
| sps::point_t< T > * | point | ||
| ) | 
Intersection point of line originating from center of ellipsis in the plane defined using Euler coordinates and a direction angle arc
TODO(JMH): Support Euler orientation, ellipsis is assumed to lie in xy-plane
| [in] | ellipsis | |
| [in] | arc | angle | 
| [out] | point | intersection point | 
| void basis_rotate | ( | const sps::point_t< T > & | input, | 
| const euler_t< T > & | euler, | ||
| sps::point_t< T > * | output | ||
| ) | 
Rotate point using 3 Euler angles according to the convention.
| conv | Rotation convention | 
| input | |
| euler | |
| output | 
| void basis_vectors | ( | sps::point_t< T > * | output, | 
| const sps::euler_t< T > & | euler, | ||
| size_t | index | ||
| ) | 
Function for returning the basis vector for a given coordinate system defined using 3 Euler angles according to the the z-x-z' or y-x-y' convention.
| conv | Rotation convention | 
| output | |
| euler | |
| index | 
| void basis_vectors | ( | T * | vec0, | 
| T * | vec1, | ||
| T * | vec2, | ||
| const sps::euler_t< T > & | euler | ||
| ) | 
Function for returning the basis vector for a given coordinate system defined using 3 Euler angles according to the the z-x-z' convention. Using SIMD for packed singles
| vec0 | |
| vec1 | |
| vec2 | |
| euler | 
      
  | 
  inline | 
Clamp a vector inside a box
| point | |
| box | 
References bbox_t< T >::max, and bbox_t< T >::min.
Referenced by nearest_point_on_bbox().

| void compute_bounding_box3 | ( | const T * | pos, | 
| const size_t | nPos, | ||
| sps::bbox_t< T > * | box | ||
| ) | 
Compute bounding box aligned with the axes for 3D positions
| pos | |
| nPos | |
| box | 
References bbox_t< T >::max, and bbox_t< T >::min.
| void compute_bounding_box_circle | ( | const sps::circle_t< T > & | circle, | 
| sps::bbox_t< T > * | box | ||
| ) | 
References circle_t< T >::center, dot(), circle_t< T >::euler, bbox_t< T >::max, bbox_t< T >::min, and circle_t< T >::radius.

Cross product of two points or vectors
| a | |
| b | 
Referenced by dist_point_to_line().

Distance from point to circle
| point | |
| circle | 
| void dist_point_to_circle_local | ( | const point_t< T > & | point, | 
| const circle_t< T > & | circle, | ||
| T * | r, | ||
| T * | z, | ||
| T * | distNear | ||
| ) | 
| void dist_point_to_circle_local | ( | const point_t< T > & | point, | 
| const circle_t< T > & | circle, | ||
| T * | r, | ||
| T * | z, | ||
| T * | distNear, | ||
| T * | distFar | ||
| ) | 
Distance from point to point
| a | First point | 
| b | Second point | 
      
  | 
  inline | 
Shortest and longest distance between any point on two boxes
| box0 | |
| box1 | |
| distNear | Shortest distance | 
| distFar | Longest distance | 
TODO: Verify if point is inside a box
References bbox_t< T >::max, bbox_t< T >::min, and nearest_point_on_bbox().

Dot product of vectors or points
| a | |
| b | 
Referenced by sofus::calcProjectionAndBoundaries(), compute_bounding_box_circle(), norm(), and sgn_dist_to_plane().

| void euler2rot | ( | const sps::euler_t< T > & | euler, | 
| sps::mat3_t< T > * | mat | ||
| ) | 
      
  | 
  inline | 
Farthest point on a box (from a point)
| point | |
| box | 
References bbox_t< T >::max, and bbox_t< T >::min.
| void intcp_line_rect | ( | const sps::element_rect_t< T > & | rect, | 
| const T & | y, | ||
| const T & | x, | ||
| sps::point_t< T > * | point | ||
| ) | 
| std::pair< T, T > minmax_delay | ( | const T * | xs, | 
| const U * | ws, | ||
| size_t | nData | ||
| ) | 
| std::pair< I, J > minmax_weighted_element | ( | I | begin, | 
| I | end, | ||
| J | it | ||
| ) | 
      
  | 
  inline | 
Nearest point on a box (from a point)
| point | |
| box | 
References clamp_vector().
Referenced by dists_most_distant_and_closest().


      
  | 
  inline | 
Norm of a vector or point
| a | 
References dot().
Referenced by sofus::calcProjectionAndBoundaries(), and dist_point_to_line().


Scalar multiplication of a vector or point
| a | scalar | 
| b | point | 
Add two points
| a | |
| b | 
Subtract two points
| a | |
| b | 
      
  | 
  inline | 
References mat3_t< T >::data.
      
  | 
  inline | 
Operator for printing points to a stream
| out | |
| point | 
      
  | 
  inline | 
References bbox_t< T >::max, and bbox_t< T >::min.
| void rot2euler | ( | const sps::mat3_t< T > & | rot, | 
| euler_t< T > * | euler | ||
| ) | 
      
  | 
  inline | 
Signed distance from point to plane.
| point | |
| pointOnPlane | |
| unitNormal | 
References dot().

| void tan_point_ellipsis | ( | const sps::ellipsis_t< T > & | ellipsis, | 
| const T & | y, | ||
| const T & | x, | ||
| sps::point_t< T > * | point | ||
| ) |