Namespaces | |
| namespace | detail |
Classes | |
| class | AABB |
| class | BaseShape |
| class | Capsule |
| class | Cylinder |
| class | Ellipsoid |
| class | HybridVolume |
| class | LocalTriangleFrame |
| class | OBB |
| class | Plane |
| class | PlaneBox |
| class | Prism |
| class | Quadric |
| class | Ray |
| class | Sphere |
| class | Tetrahedron |
| class | TetrahedronSlicer |
| class | ZTetrahedronSlicer |
| class | Torus |
| class | Triangle |
| class | VolumeShape |
Functions | |
| template<typename vector3_iterator , typename aabb_type > | |
| void | aabb_fit (vector3_iterator begin, vector3_iterator end, aabb_type &aabb) |
| template<typename aabb_type > | |
| aabb_type | aabb_union (aabb_type const &A, aabb_type const &B) |
| template<typename vector_type > | |
| vector_type::value_type | angle_from_cot (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename V > | |
| void | barycentric_geometric (V const &x1, V const &x2, V const &x3, typename V::value_type &w1, typename V::value_type &w2) |
| template<typename V > | |
| void | barycentric_geometric (V const &x1, V const &x2, V const &x3, V const &x4, typename V::value_type &w1, typename V::value_type &w2, typename V::value_type &w3) |
| template<typename V > | |
| void | barycentric_geometric (V const &x1, V const &x2, V const &x3, V const &x4, V const &p, typename V::value_type &w1, typename V::value_type &w2, typename V::value_type &w3, typename V::value_type &w4) |
| template<typename V > | |
| void | barycentric_algebraic (V const &x1, V const &x2, V const &x3, V const &p, typename V::value_type &w1, typename V::value_type &w2, typename V::value_type &w3) |
| template<typename V > | |
| void | barycentric_algebraic (V const &x1, V const &x2, V const &x3, V const &x4, V const &p, typename V::value_type &w1, typename V::value_type &w2, typename V::value_type &w3, typename V::value_type &w4) |
| template<typename vector3_type , typename sphere_type > | |
| void | compute_circumscribed_sphere (vector3_type const &p, sphere_type &sphere) |
| template<typename vector3_type , typename sphere_type > | |
| void | compute_circumscribed_sphere (vector3_type const &p0, vector3_type const &p1, sphere_type &sphere) |
| template<typename vector3_type , typename sphere_type > | |
| void | compute_circumscribed_sphere (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, sphere_type &sphere) |
| template<typename vector3_type , typename sphere_type > | |
| void | compute_circumscribed_sphere (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3, sphere_type &sphere) |
| template<typename vector_type > | |
| vector_type::value_type | compute_area_mixed (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename real_type , typename vector3_type > | |
| void | compute_box_mass_properties (vector3_type const &half_size, real_type const &density, real_type &mass, vector3_type &inertia) |
| template<typename vector3_type , typename real_type > | |
| void | compute_closest_points_line_line (vector3_type const &pA, vector3_type const &uA, vector3_type const &pB, vector3_type const &uB, real_type &s, real_type &t) |
| void | compute_cylinder_mass_properties (real_type const &radius, real_type const &half_height, real_type const &density, real_type &mass, vector3_type &inertia) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_distance_to_triangle (vector3_type const &p, vector3_type const &pi, vector3_type const &pj, vector3_type const &pk) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_inscribed_circumscribed_radius_quality_measure (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_inscribed_radius_length_quality_measure (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3) |
| template<typename vector3_type , typename real_type > | |
| void | compute_tetrahedron_inscribed_sphere (vector3_type const &pi, vector3_type const &pj, vector3_type const &pk, vector3_type const &pm, vector3_type ¢er, real_type &radius) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_minimum_sine_dihedral_angle_quality_measure (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3) |
| template<typename vector3_type , typename matrix3x3_type > | |
| void | compute_obb_aabb (vector3_type const &position, matrix3x3_type const &R, vector3_type const &ext, vector3_type &min_coord, vector3_type &max_coord) |
| template<typename obb_type , typename aabb_type > | |
| void | compute_obb_aabb (obb_type const &obb, aabb_type &aabb) |
| template<typename obb_type > | |
| geometry::AABB< typename obb_type::math_types > | compute_obb_aabb (obb_type const &obb) |
| template<typename vector_type , typename real_type > | |
| void | compute_perpendicular_line_point (vector_type const &p0, vector_type const &p1, vector_type const &x, real_type &t) |
| template<typename vector3_type , typename real_type > | |
| void | compute_plane_aabb (vector3_type const &n, real_type const &w, vector3_type &min_coord, vector3_type &max_coord) |
| template<typename plane_type , typename aabb_type > | |
| void | compute_plane_aabb (plane_type const &plane, aabb_type &aabb) |
| template<typename plane_type > | |
| geometry::AABB< typename plane_type::math_types > | compute_plane_aabb (plane_type const &plane) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_signed_distance_to_triangle (vector3_type const &p, vector3_type const &pi, vector3_type const &pj, vector3_type const &pk, vector3_type const &nv_i, vector3_type const &nv_j, vector3_type const &nv_k, vector3_type const &ne_i, vector3_type const &ne_j, vector3_type const &ne_k) |
| template<typename vector3_iterator , typename sphere_type > | |
| void | compute_smallest_sphere (vector3_iterator begin, vector3_iterator end, sphere_type &sphere) |
| template<typename vector3_type , typename real_type > | |
| void | compute_sphere_aabb (vector3_type const ¢er, real_type const &radius, vector3_type &min_coord, vector3_type &max_coord) |
| template<typename sphere_type , typename aabb_type > | |
| void | compute_sphere_aabb (sphere_type const &sphere, aabb_type &aabb) |
| template<typename sphere_type > | |
| geometry::AABB< typename sphere_type::math_types > | compute_sphere_aabb (sphere_type const &sphere) |
| template<typename real_type , typename vector3_type > | |
| void | compute_sphere_mass_properties (real_type const &radius, real_type const &density, real_type &mass, vector3_type &inertia) |
| template<typename vector3_type > | |
| void | compute_tetrahedron_aabb (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3, vector3_type &min_coord, vector3_type &max_coord) |
| template<typename tetrahedron_type , typename vector3_type > | |
| void | compute_tetrahedron_aabb (tetrahedron_type const &tetrahedron, vector3_type &min_coord, vector3_type &max_coord) |
| template<typename tetrahedron_type , typename aabb_type > | |
| void | compute_tetrahedron_aabb (tetrahedron_type const &tetrahedron, aabb_type &aabb) |
| template<typename tetrahedron_type > | |
| geometry::AABB< typename tetrahedron_type::math_types > | compute_tetrahedron_aabb (tetrahedron_type const &tetrahedron) |
| template<typename vector_type > | |
| vector_type::value_type | compute_triangle_area (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_triangle_extrusion_length (vector3_type const &p1, vector3_type const &p2, vector3_type const &p3, vector3_type const &n1, vector3_type const &n2, vector3_type const &n3, bool inward=false) |
| template<typename vector3_type > | |
| vector3_type::value_type | compute_volume_length_quality_measure (vector3_type const &p0, vector3_type const &p1, vector3_type const &p2, vector3_type const &p3) |
| template<typename vector_type > | |
| vector_type::value_type | cot (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename vector3_iterator , typename cylinder_type > | |
| void | cylinder_fit (vector3_iterator begin, vector3_iterator end, cylinder_type &cylinder, bool const &use_convex_surface=true) |
| template<typename real_type , typename vector3_type , typename vector3_iterator > | |
| Quadric< real_type > | cylindrical_growth (vector3_type const ¢er, real_type const &radius, vector3_type const &p, vector3_type const &q, vector3_type const &r, real_type const &alpha, vector3_iterator begin, vector3_iterator end, real_type &beta, vector3_type &s) |
| template<typename lut_container > | |
| void | create_lut6 (lut_container &lut) |
| template<typename lut_container > | |
| void | create_lut14 (lut_container &lut) |
| template<typename lut_container > | |
| void | create_lut26 (lut_container &lut) |
| template<typename lut_iterator , typename vector3_type > | |
| unsigned int | direction_bitmask (lut_iterator begin, lut_iterator end, vector3_type const &v) |
| template<typename vector3_type , typename vector3_iterator , typename ellipsoid_type > | |
| void | ellipsoid_growth_fit (vector3_type const &p, vector3_type const &n, vector3_iterator begin, vector3_iterator end, ellipsoid_type &E) |
| template<typename real_type , typename vector3_type , typename vector3_iterator > | |
| Quadric< real_type > | ellipsoid_growth (real_type const &radius, vector3_type const ¢er, vector3_type const &p, vector3_type const &q, vector3_iterator begin, vector3_iterator end, real_type &alpha, vector3_type &r) |
| template<typename vector3_iterator , typename vector3_container , typename vector3_type > | |
| void | graham_scan (vector3_iterator begin, vector3_iterator end, vector3_container &hull, vector3_type const &n) |
| template<typename vector3_iterator , typename vector3_container > | |
| void | graham_scan (vector3_iterator begin, vector3_iterator end, vector3_container &hull) |
| template<typename vector3_iterator , typename hybrid_type > | |
| void | hybrid_fit (vector3_iterator begin, vector3_iterator end, hybrid_type &hybrid, bool const &use_convex_surface=true) |
| template<typename hybrid_volume_iterator , typename hybrid_type > | |
| void | hybrid_volume_fit (hybrid_volume_iterator begin, hybrid_volume_iterator end, hybrid_type &hybrid) |
| template<typename vector_type > | |
| bool | is_angle_obtuse (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename vector_type > | |
| bool | is_triangle_obtuse (vector_type const &p, vector_type const &pi, vector_type const &pj) |
| template<typename vector3_iterator , typename obb_type > | |
| void | obb_fit (vector3_iterator begin, vector3_iterator end, obb_type &obb, bool const &use_convex_surface=true) |
| template<typename real_type , typename vector3_type > | |
| unsigned int | obb_z_slice (vector3_type const vertices[8], real_type z, vector3_type slice[8]) |
| template<typename T > | |
| Plane< typename math::BasicMathTypes< T, size_t > > | make_plane (math::Vector3< T > const &n, T const &w) |
| template<typename T > | |
| std::ostream & | operator<< (std::ostream &o, Plane< T > const &p) |
| template<typename T > | |
| std::istream & | operator>> (std::istream &i, Plane< T > &p) |
| template<typename vector3_iterator , typename prism_type > | |
| void | prism_fit (vector3_iterator begin, vector3_iterator end, prism_type &prism, bool const &use_convex_surface=true) |
| template<typename real_type , typename vector3_type > | |
| Quadric< real_type > | make_sphere_quadric (real_type const &radius, vector3_type const ¢er) |
| template<typename real_type , typename vector3_type > | |
| Quadric< real_type > | make_cylinder_quadric (vector3_type const ¢er, vector3_type const &axis0, real_type const &radius0, vector3_type const &axis1, real_type const &radius1) |
| template<typename vector3_type > | |
| Quadric< typename vector3_type::value_type > | make_plane_product_quadric (vector3_type const &p, vector3_type const &np, vector3_type const &q, vector3_type const &nq) |
| template<typename quadric_type > | |
| bool | is_valid_ellipsoid (quadric_type const &Q) |
| template<typename real_type , typename vector3_type , typename vector3_iterator > | |
| Quadric< real_type > | spherical_growth (vector3_type const &p, vector3_type const &n, vector3_iterator begin, vector3_iterator end, real_type &radius, vector3_type &q) |
| void OpenTissue::geometry::aabb_fit | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| aabb_type & | aabb | |||
| ) |
AABB Fit. This computes a``tight'' fitting enclosing AABB around a given point cloud.
Example Usage:
std::vector<vector3<real_type> > points(100); ... fill in coordinate values of points ... AABB<...> aabb; aabb_fit(points.begin(),points.end(),aabb)
Note that you could equally well use it as
vector3<real_type> * points = new vector<vector3<real_type>[100]; ... fill in coordinate values of points ... AABB<...> aabb; aabb_fit(points,points+100,aabb)
| begin | Iterator to first point | |
| end | Iterator to one past the last point | |
| aabb | Upon return this argument holds the fitted AABB. |
| aabb_type OpenTissue::geometry::aabb_union | ( | aabb_type const & | A, | |
| aabb_type const & | B | |||
| ) |
| vector_type::value_type OpenTissue::geometry::angle_from_cot | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Retrives the ``angle'' from the cotangent of two vectors, (pi-p) and (pj-p). This implementation is based on the paper:
Meyer, M., Desbrun, M., Schröder, P., AND Barr, A. H. Discrete Differential Geometry Operators for Triangulated 2-Manifolds, 2002. VisMath.
| p | The common tail point of the two vectors | |
| pi | The head point of one vector. | |
| pj | The head point of the other vector. |
| void OpenTissue::geometry::barycentric_algebraic | ( | V const & | x1, | |
| V const & | x2, | |||
| V const & | x3, | |||
| V const & | x4, | |||
| V const & | p, | |||
| typename V::value_type & | w1, | |||
| typename V::value_type & | w2, | |||
| typename V::value_type & | w3, | |||
| typename V::value_type & | w4 | |||
| ) | [inline] |
| void OpenTissue::geometry::barycentric_algebraic | ( | V const & | x1, | |
| V const & | x2, | |||
| V const & | x3, | |||
| V const & | p, | |||
| typename V::value_type & | w1, | |||
| typename V::value_type & | w2, | |||
| typename V::value_type & | w3 | |||
| ) | [inline] |
| void OpenTissue::geometry::barycentric_geometric | ( | V const & | x1, | |
| V const & | x2, | |||
| V const & | x3, | |||
| typename V::value_type & | w1, | |||
| typename V::value_type & | w2 | |||
| ) | [inline] |
| void OpenTissue::geometry::barycentric_geometric | ( | V const & | x1, | |
| V const & | x2, | |||
| V const & | x3, | |||
| V const & | x4, | |||
| typename V::value_type & | w1, | |||
| typename V::value_type & | w2, | |||
| typename V::value_type & | w3 | |||
| ) | [inline] |
| void OpenTissue::geometry::barycentric_geometric | ( | V const & | x1, | |
| V const & | x2, | |||
| V const & | x3, | |||
| V const & | x4, | |||
| V const & | p, | |||
| typename V::value_type & | w1, | |||
| typename V::value_type & | w2, | |||
| typename V::value_type & | w3, | |||
| typename V::value_type & | w4 | |||
| ) | [inline] |
| vector_type::value_type OpenTissue::geometry::compute_area_mixed | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Compute the mixed triangle area. Implicitly assumes that vertex arguments are given in CCW order. This implementation is based on the paper:
Meyer, M., Desbrun, M., Schröder, P., AND Barr, A. H. Discrete Differential Geometry Operators for Triangulated 2-Manifolds, 2002. VisMath.
| p | First vertex of triangle. | |
| pi | Second vertex of triangle. | |
| pj | Third vertex of triangle. |
| void OpenTissue::geometry::compute_box_mass_properties | ( | vector3_type const & | half_size, | |
| real_type const & | density, | |||
| real_type & | mass, | |||
| vector3_type & | inertia | |||
| ) |
Compute Box Mass Properties
Some density values in kg/m^3 Air 20 C, 1 atm, dry 1.21 Aluminum 2700 Balsa wood 120 Brick 2000 Copper 8900 Cork 250 Diamond 3300 Earth Average 5500 Core 9500 Crust 2800 Glass 2500 Gold 19300 Helium (0 C, 1 atm) 0.178 Hydrogen (0C, 1 atm) 0.090 Ice 917 Iron 7900 Lead 11300 Mercury 13600 Nickel 8800 Oil (olive) 920 Oxygen (0 C, 1 atm) 1.43 Platinum 21500 Silver 10500 Styrofoam 100 Tungsten 19300 Uranium 18700 Water 20 C, 1 atm 998 20 C, 50 atm 1000 seawater 20 C, 1 atm 1024
| half_size | Half side extent of box | |
| density | The mass density of the box. | |
| mass | Upon return this argument holds the total mass of the box. | |
| intertia | Upon return this argument holds the body frame inertia tensor. Note this is a diagnoal 3x3 matrix, so only 3 values are needed. |
| void OpenTissue::geometry::compute_circumscribed_sphere | ( | vector3_type const & | p, | |
| sphere_type & | sphere | |||
| ) |
| p |
| void OpenTissue::geometry::compute_circumscribed_sphere | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| sphere_type & | sphere | |||
| ) |
| p0 | ||
| p1 |
| void OpenTissue::geometry::compute_circumscribed_sphere | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| sphere_type & | sphere | |||
| ) |
| p0 | ||
| p1 | ||
| p2 |
| void OpenTissue::geometry::compute_circumscribed_sphere | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3, | |||
| sphere_type & | sphere | |||
| ) |
| p0 | ||
| p1 | ||
| p2 | ||
| p3 |
| void OpenTissue::geometry::compute_closest_points_line_line | ( | vector3_type const & | pA, | |
| vector3_type const & | uA, | |||
| vector3_type const & | pB, | |||
| vector3_type const & | uB, | |||
| real_type & | s, | |||
| real_type & | t | |||
| ) |
Compute Closest Points between Lines
| pA | Point on first line. | |
| uA | Direction of first line (unit vector). | |
| pB | Point on second line. | |
| uB | Direction of second line (unit vector). | |
| s | The line parameter of the closest point on the first line pA + uA*s | |
| t | The line parameter of the closest point on the second line pB + uB*t |
| void OpenTissue::geometry::compute_cylinder_mass_properties | ( | real_type const & | radius, | |
| real_type const & | half_height, | |||
| real_type const & | density, | |||
| real_type & | mass, | |||
| vector3_type & | inertia | |||
| ) |
Compute Cylinder Mass Properties.
Some density values in kg/m^3 Air 20 C, 1 atm, dry 1.21 Aluminum 2700 Balsa wood 120 Brick 2000 Copper 8900 Cork 250 Diamond 3300 Earth Average 5500 Core 9500 Crust 2800 Glass 2500 Gold 19300 Helium (0 C, 1 atm) 0.178 Hydrogen (0C, 1 atm) 0.090 Ice 917 Iron 7900 Lead 11300 Mercury 13600 Nickel 8800 Oil (olive) 920 Oxygen (0 C, 1 atm) 1.43 Platinum 21500 Silver 10500 Styrofoam 100 Tungsten 19300 Uranium 18700 Water 20 C, 1 atm 998 20 C, 50 atm 1000 seawater 20 C, 1 atm 1024
| radius | ||
| half_height | ||
| density | The mass density of the cylinder. | |
| mass | Upon return this argument holds the total mass of the cylinder. | |
| intertia | Upon return this argument holds the body frame inertia tensor. Note this is a diagnoal 3x3 matrix, so only 3 values are needed. |
| vector3_type::value_type OpenTissue::geometry::compute_distance_to_triangle | ( | vector3_type const & | p, | |
| vector3_type const & | pi, | |||
| vector3_type const & | pj, | |||
| vector3_type const & | pk | |||
| ) |
Compute Distance to Triangle . This method implicitly assumes that the triangle is non-degenerate!
p A point in space
| pi | First vertex of triangle. | |
| pj | Second vertex of triangle. | |
| pk | Third vertex of triangle. |
| vector3_type::value_type OpenTissue::geometry::compute_inscribed_circumscribed_radius_quality_measure | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3 | |||
| ) | [inline] |
Compute Tetrahedron Quality Measure. The quality of a tetrahedron is 3.0 times the ratio of the radius of the inscribed sphere divided by that of the circumscribed sphere.
An equilateral tetrahredron achieves the maximum possible quality of 1.
| p0 | The first coordinate of the tetrahedron. | |
| p1 | The second coordinate of the tetrahedron. | |
| p2 | The third coordinate of the tetrahedron. | |
| p3 | The fourth coordinate of the tetrahedron. |
| vector3_type::value_type OpenTissue::geometry::compute_inscribed_radius_length_quality_measure | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3 | |||
| ) | [inline] |
Compute Tetrahedron Quality Measure. The quality measure of a tetrahedron is:
2 * sqrt ( 6 ) * RIN / LMAX
where
RIN = radius of the inscribed sphere; LMAX = length of longest side of the tetrahedron.
An equilateral tetrahredron achieves the maximum possible quality of 1.
| p0 | The first coordinate of the tetrahedron. | |
| p1 | The second coordinate of the tetrahedron. | |
| p2 | The third coordinate of the tetrahedron. | |
| p3 | The fourth coordinate of the tetrahedron. |
| vector3_type::value_type OpenTissue::geometry::compute_minimum_sine_dihedral_angle_quality_measure | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3 | |||
| ) | [inline] |
Compute Tetrahedron Quality Measure. This routine computes minimum sine of the dihedral angles of a tetrahedron.
{9 {2}}{8} V min_{1 i < j 4} {l_{ij}}{A_k A_l}
where l_ij is the length of the edge between vertices i and j. A_k is the signed area of the triangle opposing the k'th vertex. V is the signed volume of the tetrahedron.
As described in the paper:
What Is a Good Linear Finite element? Interpolation, Conditioning, Anisotropy, and Quality Measures (Preprint)
by Jonathan Shewchuk.
| p0 | The first coordinate of the tetrahedron. | |
| p1 | The second coordinate of the tetrahedron. | |
| p2 | The third coordinate of the tetrahedron. | |
| p3 | The fourth coordinate of the tetrahedron. |
| void OpenTissue::geometry::compute_obb_aabb | ( | vector3_type const & | position, | |
| matrix3x3_type const & | R, | |||
| vector3_type const & | ext, | |||
| vector3_type & | min_coord, | |||
| vector3_type & | max_coord | |||
| ) |
| void OpenTissue::geometry::compute_obb_aabb | ( | obb_type const & | obb, | |
| aabb_type & | aabb | |||
| ) |
| geometry::AABB<typename obb_type::math_types> OpenTissue::geometry::compute_obb_aabb | ( | obb_type const & | obb | ) |
| void OpenTissue::geometry::compute_perpendicular_line_point | ( | vector_type const & | p0, | |
| vector_type const & | p1, | |||
| vector_type const & | x, | |||
| real_type & | t | |||
| ) |
Compute Perpendicular Line Point in nD.
| p0 | First point on line. | |
| p1 | Second point on line. | |
| x | Requesting point to find the perpendicular point on the line. | |
| t | The line parameter t in the form of p0+t(p1-p0). |
| void OpenTissue::geometry::compute_plane_aabb | ( | vector3_type const & | n, | |
| real_type const & | w, | |||
| vector3_type & | min_coord, | |||
| vector3_type & | max_coord | |||
| ) |
| void OpenTissue::geometry::compute_plane_aabb | ( | plane_type const & | plane, | |
| aabb_type & | aabb | |||
| ) |
| geometry::AABB<typename plane_type::math_types> OpenTissue::geometry::compute_plane_aabb | ( | plane_type const & | plane | ) |
| vector3_type::value_type OpenTissue::geometry::compute_signed_distance_to_triangle | ( | vector3_type const & | p, | |
| vector3_type const & | pi, | |||
| vector3_type const & | pj, | |||
| vector3_type const & | pk, | |||
| vector3_type const & | nv_i, | |||
| vector3_type const & | nv_j, | |||
| vector3_type const & | nv_k, | |||
| vector3_type const & | ne_i, | |||
| vector3_type const & | ne_j, | |||
| vector3_type const & | ne_k | |||
| ) |
Compute Signed Distance to Triangle . This method implicitly assumes that the triangle is non-degenerate!
p A point in space
| pi | First vertex of triangle. | |
| pj | Second vertex of triangle. | |
| pk | Third vertex of triangle. | |
| nv_i | The pseudonormal of vertex i. | |
| nv_j | The pseudonormal of vertex j. | |
| nv_k | The pseudonormal of vertex k. | |
| ne_i | The pseudonormal of the edge going from vertex j to vertex k. | |
| ne_j | The pseudonormal of the edge going from vertex k to vertex i. | |
| ne_k | The pseudonormal of the edge going from vertex i to vertex j. |
| void OpenTissue::geometry::compute_smallest_sphere | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| sphere_type & | sphere | |||
| ) |
Convenience function.
| begin | ||
| end | ||
| sphere |
| void OpenTissue::geometry::compute_sphere_aabb | ( | sphere_type const & | sphere, | |
| aabb_type & | aabb | |||
| ) |
| geometry::AABB<typename sphere_type::math_types> OpenTissue::geometry::compute_sphere_aabb | ( | sphere_type const & | sphere | ) |
| void OpenTissue::geometry::compute_sphere_aabb | ( | vector3_type const & | center, | |
| real_type const & | radius, | |||
| vector3_type & | min_coord, | |||
| vector3_type & | max_coord | |||
| ) |
This function computes a tight fitting axis aligned bounding box around the specified sphere.
| void OpenTissue::geometry::compute_sphere_mass_properties | ( | real_type const & | radius, | |
| real_type const & | density, | |||
| real_type & | mass, | |||
| vector3_type & | inertia | |||
| ) |
Compute Sphere Mass Properties.
Some density values in kg/m^3
Air 20 C, 1 atm, dry 1.21 Aluminum 2700 Balsa wood 120 Brick 2000 Copper 8900 Cork 250 Diamond 3300 Earth Average 5500 Core 9500 Crust 2800 Glass 2500 Gold 19300 Helium (0 C, 1 atm) 0.178 Hydrogen (0C, 1 atm) 0.090 Ice 917 Iron 7900 Lead 11300 Mercury 13600 Nickel 8800 Oil (olive) 920 Oxygen (0 C, 1 atm) 1.43 Platinum 21500 Silver 10500 Styrofoam 100 Tungsten 19300 Uranium 18700 Water 20 C, 1 atm 998 20 C, 50 atm 1000 seawater 20 C, 1 atm 1024
| radius | The radius of the sphere. | |
| density | The mass density of the sphere. | |
| mass | Upon return this argument holds the total mass of the sphere. | |
| intertia | Upon return this argument holds the body frame inertia tensor. Note this is a diagnoal 3x3 matrix, so only 3 values are needed. |
| void OpenTissue::geometry::compute_tetrahedron_aabb | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3, | |||
| vector3_type & | min_coord, | |||
| vector3_type & | max_coord | |||
| ) |
Compute AABB of Tetrahedron.
| p0 | The position of a corner of the tetrahedron. | |
| p1 | The position of a corner of the tetrahedron. | |
| p2 | The position of a corner of the tetrahedron. | |
| p3 | The position of a corner of the tetrahedron. | |
| min_coord | Upon return holds the minimum coordinate corner of the AABB. | |
| max_coord | Upon return holds the maximum coordinate corner of the AABB. |
| void OpenTissue::geometry::compute_tetrahedron_aabb | ( | tetrahedron_type const & | tetrahedron, | |
| vector3_type & | min_coord, | |||
| vector3_type & | max_coord | |||
| ) |
Compute Tetrahedron AABB.
This function computes a tight fitting axis aligned bounding box around the specified tetrahedron.
| void OpenTissue::geometry::compute_tetrahedron_aabb | ( | tetrahedron_type const & | tetrahedron, | |
| aabb_type & | aabb | |||
| ) |
Compute Tetrahedron AABB.
This function computes a tight fitting axis aligned bounding box around the specified tetrahedron.
| tetrahedron | The specified tetrahedron. | |
| aabb | Upon return holds the computed AABB. |
| geometry::AABB<typename tetrahedron_type::math_types> OpenTissue::geometry::compute_tetrahedron_aabb | ( | tetrahedron_type const & | tetrahedron | ) |
Compute Tetrahedron AABB.
This function computes a tight fitting axis aligned bounding box around the specified tetrahedron.
| tetrahedron | The specified tetrahedron. |
| void OpenTissue::geometry::compute_tetrahedron_inscribed_sphere | ( | vector3_type const & | pi, | |
| vector3_type const & | pj, | |||
| vector3_type const & | pk, | |||
| vector3_type const & | pm, | |||
| vector3_type & | center, | |||
| real_type & | radius | |||
| ) |
Compute inscribed sphere of tetrahedron.
Note this method assumes that the tetrahedron is right-handed (i.e. has positive volume). If one wants to make sure that the method is invoked probably then one can use the following code
Tetrahedron< ... > tetrahedron(p0,p1,p2,p3);
if(tetrahedron.volume()>0) compute_tetrahedron_inscribed_sphere(p0,p1,p2,p3,center,radius); else compute_tetrahedron_inscribed_sphere(p1,p0,p2,p3,center,radius);
Tetrahedra with negative volume can occur durring simulation, if deformations is too large then a tetrahedron may get inverted. Implying negative volume.
| pi | The first point of the tetrahedron. | |
| pj | The second point of the tetrahedron. | |
| pk | The third point of the tetrahedron. | |
| pm | This fourth point of the tetrahedron. Note this point should lie on the front-side of the triangle given by points pi, pj, and pk. | |
| center | Upon return this argument holds the computed center. | |
| radius | Upon return this argument holds the computed radius. |
| vector_type::value_type OpenTissue::geometry::compute_triangle_area | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Compute Triangle Area.
| p | First vertex of triangle. | |
| pi | Second vertex of triangle. | |
| pj | Third vertex of triangle. |
| vector3_type::value_type OpenTissue::geometry::compute_triangle_extrusion_length | ( | vector3_type const & | p1, | |
| vector3_type const & | p2, | |||
| vector3_type const & | p3, | |||
| vector3_type const & | n1, | |||
| vector3_type const & | n2, | |||
| vector3_type const & | n3, | |||
| bool | inward = false | |||
| ) |
Compute Triangle Extrusion Length. Maximum extrusion along normals, which do not result in a ``swallow tail'' case.
To get inward extrusion, flip normal directions!
| p1 | Coordinate of first vertex. | |
| p2 | Coordinate of second vertex. | |
| p3 | Coordinate of third vertex. | |
| n1 | Outward pointing vertex normal of first vertex. | |
| n2 | Outward pointing vertex normal of second vertex. | |
| n3 | Outward pointing vertex normal of third vertex. | |
| inward | Boolean flag indicating wheter an outward or inward extrusion is computed. I.e. in case of ourward extrusion the i'th extruded vertex coordinate is given by q_i = p_i + epsilon n_i, in case of inward extrusion q_i = p_i - epsilon n_i |
| vector3_type::value_type OpenTissue::geometry::compute_volume_length_quality_measure | ( | vector3_type const & | p0, | |
| vector3_type const & | p1, | |||
| vector3_type const & | p2, | |||
| vector3_type const & | p3 | |||
| ) | [inline] |
Compute Tetrahedron Quality Measure. This routine computes the eigenvalue or mean ratio of a tetrahedron.
12 * ( 3 * volume )**(2/3) / (sum of square of edge lengths).
This value may be used as a shape quality measure for the tetrahedron.
For an equilateral tetrahedron, the value of this quality measure will be 1. For any other tetrahedron, the value will be between 0 and 1.
| p0 | The first coordinate of the tetrahedron. | |
| p1 | The second coordinate of the tetrahedron. | |
| p2 | The third coordinate of the tetrahedron. | |
| p3 | The fourth coordinate of the tetrahedron. |
| vector_type::value_type OpenTissue::geometry::cot | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Cotangent of two vectors. This implementation is based on the paper:
Meyer, M., Desbrun, M., Schröder, P., AND Barr, A. H. Discrete Differential Geometry Operators for Triangulated 2-Manifolds, 2002. VisMath.
This metod computes the cotangent angle between two vectors (pi-p) and (pj-p).
Let the angle between the two vectors u and v be . Then by defnition
cot() = {cos }{sin }
and we know that
cos() = { u v }{ {u} {v} }
and
{u v} = {u}{v}sin
since 1 = cos^2 + sin^2 we re-write
{u}{v}sin = {u}{v}( {1 - cos^2 })
Knowing that the angle between two vectors is between 0 and , we can throw away the negative solution of sin. Substituting the expression for cos and isolating we get
sin = { {{u}^2{v}^2 - (u v )^2 } }{{u}{v}}
Finally substituting the expressions for cos and sin into the equation for cot we get
cot() = {u v}{ {{u}^2{v}^2 - (u v )^2 } }
This is the formula we use for computing cot.
| p | The common tail point of the two vectors | |
| pi | The head point of one vector. | |
| pj | The head point of the other vector. |
| void OpenTissue::geometry::create_lut14 | ( | lut_container & | lut | ) |
| void OpenTissue::geometry::create_lut26 | ( | lut_container & | lut | ) |
| void OpenTissue::geometry::create_lut6 | ( | lut_container & | lut | ) |
| void OpenTissue::geometry::cylinder_fit | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| cylinder_type & | cylinder, | |||
| bool const & | use_convex_surface = true | |||
| ) |
Cylinder Covariance Fit. This method uses covariance analysis to fit an good ``tight'' fitting enclosing cylinder around a given point cloud.
Example Usage:
std::vector<vector3<real_type> > points(100); ... fill in coordinate values of points ... Cylinder< ... > obb; cylinder_fit(points.begin(),points.end(),obb)
Note that you could equally well use it as
vector3<real_type> * points = new vector<vector3<real_type>[100]; ... fill in coordinate values of points ... Cylinder< ... > obb; cylinder_fit(points,points+100,obb)
| begin | Iterator to first point | |
| end | Iterator to one past the last point | |
| cylinder | Upon return this argument holds the fitted cylinder. | |
| use_convex_surface | If this argument is set to true, the covariace of the surface of the convex hull of the point cloud is used to extact axis information. Default value is true. |
| Quadric<real_type> OpenTissue::geometry::cylindrical_growth | ( | vector3_type const & | center, | |
| real_type const & | radius, | |||
| vector3_type const & | p, | |||
| vector3_type const & | q, | |||
| vector3_type const & | r, | |||
| real_type const & | alpha, | |||
| vector3_iterator | begin, | |||
| vector3_iterator | end, | |||
| real_type & | beta, | |||
| vector3_type & | s | |||
| ) |
Cylindrical Growth. Find largest empty inner ellipsoid by growing it inside a cylindrical tube.
NOTE: Supposed to be used with ellipsoid_growing_fit(...).
| center | Center of largest inner empty sphere. | |
| radius | Radius of largest inner empty sphere. | |
| p | A point lying on the surface of the inner empty sphere. | |
| q | Another point lying on the surface of the inner empty sphere. | |
| r | A third point defining an ellipsoid grown inside the wedge defined by surface points p and q. | |
| alpha | The weight of the linear combination of ``wedge'' and inner sphere. | |
| begin | An iterator to the first sample point. | |
| end | An iterator one past the last sample point. | |
| beta | Upon return holds the linear weight of the cylindrical quadric, defining the resulting ellipsoid. | |
| s | Upon return holds the final and fourth point defining the last quadric. |
| unsigned int OpenTissue::geometry::direction_bitmask | ( | lut_iterator | begin, | |
| lut_iterator | end, | |||
| vector3_type const & | v | |||
| ) |
Get Direction Bit Patteren for Vector v.
| begin | Iterator to first direction vector. | |
| end | Iterator to last direction vector. | |
| v | The vector to test with |
| Quadric<real_type> OpenTissue::geometry::ellipsoid_growth | ( | real_type const & | radius, | |
| vector3_type const & | center, | |||
| vector3_type const & | p, | |||
| vector3_type const & | q, | |||
| vector3_iterator | begin, | |||
| vector3_iterator | end, | |||
| real_type & | alpha, | |||
| vector3_type & | r | |||
| ) |
Ellipsoid Growth.
NOTE: Supposed to be used with ellipsoid_growing_fit(...).
| radius | Radius of inner largest empty sphere (S). | |
| center | Center of sphere S. | |
| p | A point on the surface of the sphere S. | |
| q | A point on the surface of the sphere S. Not equal to p. | |
| begin | Iterator to first point | |
| end | Iterator to one position past the last point | |
| r | A third point defining the grown ellipsoid. | |
| alpha | The alpha value defining the quadric Q = Q1 + alpha Q2. |
| void OpenTissue::geometry::ellipsoid_growth_fit | ( | vector3_type const & | p, | |
| vector3_type const & | n, | |||
| vector3_iterator | begin, | |||
| vector3_iterator | end, | |||
| ellipsoid_type & | E | |||
| ) |
Fitting by growing Ellipsoid. Determines ``largest'' possible (inner) empty ellipsoid by a growing strategy.
| p | The surface point, used to set the starting position of the growing ellipsoid. | |
| n | The ``outward'' pointing normal at the surface point p. | |
| begin | An iterator to the first sample point. | |
| end | An iterator one past the last sample point. |
| void OpenTissue::geometry::graham_scan | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| vector3_container & | hull, | |||
| vector3_type const & | n | |||
| ) |
| void OpenTissue::geometry::graham_scan | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| vector3_container & | hull | |||
| ) |
| void OpenTissue::geometry::hybrid_fit | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| hybrid_type & | hybrid, | |||
| bool const & | use_convex_surface = true | |||
| ) |
Hybrid Fit. This computes a``tight'' fitting enclosing Hybrid around a given point cloud.
Example Usage:
std::vector<vector3<real_type> > points(100); ... fill in coordinate values of points ... Hybrid<real_type> hybrid; hybrid_fit(points.begin(),points.end(),hybrid)
Note that you could equally well use it as
vector3<real_type> * points = new vector<vector3<real_type>[100]; ... fill in coordinate values of points ... Hybrid<real_type> hybrid; hybrid_fit(points,points+100,hybrid)
| begin | Iterator to first point | |
| end | Iterator to one past the last point | |
| hybrid | Upon return this argument holds the fitted Hybrid. | |
| use_convex_surface | If this argument is set to true, the covariace of the surface of the convex hull of the point cloud is used to extact axis information. Default value is true. |
| void OpenTissue::geometry::hybrid_volume_fit | ( | hybrid_volume_iterator | begin, | |
| hybrid_volume_iterator | end, | |||
| hybrid_type & | hybrid | |||
| ) |
Fit a hybrid to enclose a collection of volumes/hybrids.
The collection could be hybrid instances, or pointers to hybrids or volume adapters etc..
| begin | An iterator to a hybrid, pointer volume adapter, etc.. | |
| end | An iterator to a hybrid, pointer volume adapter, etc.. | |
| hybrid | Upon return contains the resulting hybrid. |
| bool OpenTissue::geometry::is_angle_obtuse | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Obtuse Angle Testing This method tests if the angle between the two vectors (pi-p) and (pj-p) is greather than /2 radians.
| p | The common tail point of the two vectors | |
| pi | The head point of one vector. | |
| pj | The head point of the other vector. |
| bool OpenTissue::geometry::is_triangle_obtuse | ( | vector_type const & | p, | |
| vector_type const & | pi, | |||
| vector_type const & | pj | |||
| ) |
Obtuse Triangle Testing. If any corner of an triangle is obtuse then the triangle is considered to be obtuse.
| p | First vertex of triangle. | |
| pi | Second vertex of triangle. | |
| pj | Third vertex of triangle. |
| bool OpenTissue::geometry::is_valid_ellipsoid | ( | quadric_type const & | Q | ) |
Test if Quadris is a valid ellipsoid
| Q | The quadric. |
| Quadric<real_type> OpenTissue::geometry::make_cylinder_quadric | ( | vector3_type const & | center, | |
| vector3_type const & | axis0, | |||
| real_type const & | radius0, | |||
| vector3_type const & | axis1, | |||
| real_type const & | radius1 | |||
| ) |
| Plane< typename math::BasicMathTypes< T, size_t> > OpenTissue::geometry::make_plane | ( | math::Vector3< T > const & | n, | |
| T const & | w | |||
| ) | [inline] |
Factory method making it easier to create planes on the fly.
| n | The outward normal of the wanted plane. | |
| w | The distance from origo along the normal vector. |
| Quadric<typename vector3_type::value_type> OpenTissue::geometry::make_plane_product_quadric | ( | vector3_type const & | p, | |
| vector3_type const & | np, | |||
| vector3_type const & | q, | |||
| vector3_type const & | nq | |||
| ) |
| Quadric<real_type> OpenTissue::geometry::make_sphere_quadric | ( | real_type const & | radius, | |
| vector3_type const & | center | |||
| ) |
| void OpenTissue::geometry::obb_fit | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| obb_type & | obb, | |||
| bool const & | use_convex_surface = true | |||
| ) |
OBB Covariance Fit. This method uses covariance analysis to fit an good ``tight'' fitting enclosing OBB around a given point cloud.
Example Usage:
std::vector<vector3<real_type> > points(100); ... fill in coordinate values of points ... OBB<real_type> obb; obb_fit(points.begin(),points.end(),obb)
Note that you could equally well use it as
vector3<real_type> * points = new vector<vector3<real_type>[100]; ... fill in coordinate values of points ... OBB<real_type> obb; obb_fit(points,points+100,obb)
| begin | Iterator to first point | |
| end | Iterator to one past the last point | |
| obb | Upon return this argument holds the fitted OBB. | |
| use_convex_surface | If this argument is set to true, the covariace of the surface of the convex hull of the point cloud is used to extact axis information. Default value is true. |
| unsigned int OpenTissue::geometry::obb_z_slice | ( | vector3_type const | vertices[8], | |
| real_type | z, | |||
| vector3_type | slice[8] | |||
| ) |
OBB Z Slicer. Vertex numbers:
v4 +---------------+ v7 /| /| / | / | / | / | / | / | / | / | / | / | v5 +---------------+ v6 | | | | | | | | | | v0 +--------|------+ v3 | / | / | / | / | / | / | / | / | / | / |/ |/ v1 +---------------+v2
| vertices | Vertices of an OBB box. | |
| z | The z-value of the z-plane. | |
| slice | Upon return this array holds the vertices of the intersecting polygonal slice. |
| std::ostream& OpenTissue::geometry::operator<< | ( | std::ostream & | o, | |
| Plane< T > const & | p | |||
| ) |
| std::istream& OpenTissue::geometry::operator>> | ( | std::istream & | i, | |
| Plane< T > & | p | |||
| ) |
| void OpenTissue::geometry::prism_fit | ( | vector3_iterator | begin, | |
| vector3_iterator | end, | |||
| prism_type & | prism, | |||
| bool const & | use_convex_surface = true | |||
| ) |
Prism Fit. This computes a``tight'' fitting enclosing Prism around a given point cloud.
Example Usage:
std::vector<vector3<real_type> > points(100); ... fill in coordinate values of points ... Prism< ... > prism; prism_fit(points.begin(),points.end(),prism)
Note that you could equally well use it as
vector3<real_type> * points = new vector<vector3<real_type>[100]; ... fill in coordinate values of points ... Prism< ... > aabb; prism_fit(points,points+100,prism)
| begin | Iterator to first point | |
| end | Iterator to one past the last point | |
| prism | Upon return this argument holds the fitted prism. |
| Quadric<real_type> OpenTissue::geometry::spherical_growth | ( | vector3_type const & | p, | |
| vector3_type const & | n, | |||
| vector3_iterator | begin, | |||
| vector3_iterator | end, | |||
| real_type & | radius, | |||
| vector3_type & | q | |||
| ) |
Spherical Growth. Grows a sphere at point p in the direction of -n, such that the sphere will be the largest empty sphere.
NOTE: Supposed to be used with ellipsoid_growing_fit(...).
| p | A surface point on the sphere | |
| n | Outward surface normal at the point p. | |
| begin | Iterator to first point | |
| end | Iterator to one position past the last point | |
| q | Upon return holds the surface point on the sphere, that caused the largest radius. | |
| radius | Upon return this argument holds the value of the radius of the inner largest empty sphere, with p on its surface and normal n. Sphere center is given by: c = p - radius*n. |
1.7.1