NuriKit v0.1.0b2
Loading...
Searching...
No Matches
geometry.h File Reference
#include "nuri/eigen_config.h"
#include "nuri/meta.h"
Include dependency graph for geometry.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  nuri::OCTree
 An octree implementation for 3D point clouds. More...
class  nuri::VoxelGrid
 A uniform voxel-grid (cell list) index for 3D point clouds with a fixed neighbor cutoff. More...

Namespaces

namespace  nuri
namespace  nuri::constants

Enumerations

enum class  nuri::AlignMode : std::uint8_t { nuri::kMsdOnly = 0x1 , nuri::kXformOnly = 0x2 , nuri::kBoth = kMsdOnly | kXformOnly }

Functions

template<class DT, std::enable_if_t< std::is_floating_point_v< DT >, int > = 0>
constexpr DT nuri::deg2rad (DT deg)
template<class DT, std::enable_if_t< std::is_integral_v< DT >, int > = 0>
constexpr double nuri::deg2rad (DT deg)
template<class DT, std::enable_if_t< std::is_floating_point_v< DT >, int > = 0>
constexpr DT nuri::rad2deg (DT rad)
template<class DT, std::enable_if_t< std::is_integral_v< DT >, int > = 0>
constexpr double nuri::rad2deg (DT rad)
template<class MatrixLike, class ArrayLike>
void nuri::pdistsq (ArrayLike &&distsq, const MatrixLike &m)
template<class MatrixLike>
auto nuri::pdistsq (const MatrixLike &m)
template<class MatrixLike, class ArrayLike>
void nuri::pdist (ArrayLike &&dist, const MatrixLike &m)
template<class MatrixLike>
auto nuri::pdist (const MatrixLike &m)
template<class AL, class DAL>
void nuri::to_square_form (DAL &&dists, const AL &pdists, Eigen::Index n)
template<class ArrayLike>
auto nuri::to_square_form (const ArrayLike &pdists, Eigen::Index n)
template<class ML1, class ML2, class DML, std::enable_if_t< internal::extract_if_enum_v(ML1::RowsAtCompileTime)==internal::extract_if_enum_v(ML2::RowsAtCompileTime), int > = 0>
void nuri::cdistsq (DML &&distsq, const ML1 &a, const ML2 &b)
template<class ML1, class ML2>
auto nuri::cdistsq (const ML1 &a, const ML2 &b)
template<class ML1, class ML2, class DML>
void nuri::cdist (DML &&dist, const ML1 &a, const ML2 &b)
template<class ML1, class ML2>
auto nuri::cdist (const ML1 &a, const ML2 &b)
template<class ML1, class ML2>
auto nuri::msd (const ML1 &a, const ML2 &b)
double nuri::cos_angle (const Vector3d &oa, const Vector3d &ob)
 Calculate the cosine of the angle between two vectors.
double nuri::cos_angle (const Vector3d &o, const Vector3d &a, const Vector3d &b)
 Calculate the cosine of the angle between two vectors.
template<class Scalar, class Indexer, int N, auto... Extra>
std::pair< Scalar, Scalar > nuri::sum_tan2_half (const Matrix< Scalar, 3, N, 0, Extra... > &m, const Indexer &idxs)
 Calculate sin and cos of half an average angle between vectors, (0 - idxs[0]), (1 - idxs[1]), ..., (n-1 - idxs[n-1]).
template<class Scalar, int N, auto... Extra>
std::pair< Scalar, Scalar > nuri::sum_tan2_half (const Matrix< Scalar, 3, N, 0, Extra... > &m)
 Calculate sin and cos of half an average angle between consecutive vectors, i.e., (0, 1), (1, 2), ..., (n-1, 0).
double nuri::cos_dihedral (const Vector3d &axis, Vector3d v, Vector3d w)
 Calculate A - (v) - B - (axis) - C - (w) - D dihedral angle along the axis. Axis should be normalized.
double nuri::cos_dihedral (const Vector3d &a, const Vector3d &b, const Vector3d &c, const Vector3d &d)
 Calculate A -> - B -> C -> D dihedral angle.
template<class MatrixLike>
Vector4d nuri::fit_plane (const MatrixLike &pts, bool normalize=true)
 Perform a least-squares fit of a plane to a set of points.
template<class VectorLike>
Vector3d nuri::any_perpendicular (const VectorLike &v, bool normalize=true)
 Find a vector perpendicular to the given vector.
std::pair< Isometry3d, double > nuri::kabsch (ConstRef< Matrix3Xd > query, ConstRef< Matrix3Xd > templ, AlignMode mode=AlignMode::kBoth, bool reflection=false)
 An implementation of the Kabsch algorithm for aligning two sets of points. This algorithm is based on the implementation in TM-align.
std::pair< Isometry3d, double > nuri::qcp (const Eigen::Ref< const Matrix3Xd > &query, const Eigen::Ref< const Matrix3Xd > &templ, AlignMode mode=AlignMode::kBoth, bool reflection=false, double evalprec=1e-11, double evecprec=1e-6, int maxiter=50)
 Perform quaternion-based superposition of two sets of points.
std::pair< Isometry3d, double > nuri::qcp_inplace (MutRef< Matrix3Xd > query, MutRef< Matrix3Xd > templ, AlignMode mode=AlignMode::kBoth, bool reflection=false, double evalprec=1e-11, double evecprec=1e-6, int maxiter=50)
 In-place version of qcp().
bool nuri::embed_distances_3d (Eigen::Ref< Matrix3Xd > pts, MatrixXd &dsqs)
 A routine for converting squared pairwise distances to cartesian coordinates.
bool nuri::embed_distances_4d (Eigen::Ref< Matrix4Xd > pts, MatrixXd &dsqs)
 A routine for converting squared pairwise distances to cartesian coordinates.
Matrix3Xd nuri::canonical_fibonacci_lattice (int npts)
 Generate points on a unit sphere using the "canonical" Fibonacci lattice method.

Variables

constexpr double nuri::constants::kPi
constexpr double nuri::constants::kTwoPi
constexpr double nuri::constants::kCos15
constexpr double nuri::constants::kCos30
constexpr double nuri::constants::kCos36
constexpr double nuri::constants::kCos45
constexpr double nuri::constants::kCos54
constexpr double nuri::constants::kCos60 = 0.5
constexpr double nuri::constants::kCos75
constexpr double nuri::constants::kCos100
constexpr double nuri::constants::kCos102
constexpr double nuri::constants::kCos112
constexpr double nuri::constants::kCos115
constexpr double nuri::constants::kCos125
constexpr double nuri::constants::kCos155
constexpr double nuri::constants::kCos175
constexpr double nuri::constants::kTan10_2
constexpr double nuri::constants::kTan15_2
constexpr double nuri::constants::kTan116_2
constexpr double nuri::constants::kTan155_2