Go to the documentation of this file.
9 #ifndef opengl_CGeneralizedEllipsoidTemplate_H
10 #define opengl_CGeneralizedEllipsoidTemplate_H
89 template <
typename MATRIX,
typename VECTOR>
93 ASSERT_(new_cov.cols() == new_cov.rows() && new_cov.cols() == DIM);
165 const double d =
m_cov.det();
166 if (fabs(d) < 1e-20 || d != d)
170 m_U.setZero(DIM, DIM);
181 for (
int i = 0; i < DIM; i++)
182 if (
m_U.coeff(i, i) == 0) eig_ok =
false;
187 std::vector<array_parameter_t> params_pts;
189 detail::generalizedEllipsoidPoints<DIM>(
193 std::vector<array_point_t> render_pts;
198 std::numeric_limits<double>::max(),
199 std::numeric_limits<double>::max(), 0);
201 -std::numeric_limits<double>::max(),
202 -std::numeric_limits<double>::max(), 0);
203 for (
size_t i = 0; i < render_pts.size(); i++)
204 for (
int k = 0; k < DIM; k++)
214 mrpt::opengl::detail::renderGeneralizedEllipsoidTemplate<DIM>(
248 const std::vector<array_point_t>& params_pts,
249 std::vector<array_point_t>& out_pts)
const = 0;
void keep_min(T &var, const K test_val)
If the second argument is below the first one, set the first argument to this lower value.
const cov_matrix_t & getCovMatrix() const
Gets the current uncertainty covariance of parameter space.
void render_dl() const override
Render If one of the eigen value of the covariance matrix of the ellipsoid is null,...
mrpt::math::TPoint3D m_bb_min
GLdouble GLdouble GLdouble GLdouble q
uint32_t getNumberOfSegments()
float getLineWidth() const
virtual void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max) const override
Evaluates the bounding box of this object (including possible children) in the coordinate frame of th...
void setNumberOfSegments(const uint32_t numSegments)
Set the number of segments of the surface/curve (higher means with greater resolution)
void thisclass_readFromStream(mrpt::serialization::CArchive &in)
A renderizable object suitable for rendering with OpenGL's display lists.
float getQuantiles() const
Refer to documentation of setQuantiles()
EIGEN_STRONG_INLINE void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated)
float m_quantiles
The number of "sigmas" for drawing the ellipse/ellipsoid (default=3)
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
void thisclass_writeToStream(mrpt::serialization::CArchive &out) const
virtual bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const override
Ray tracing.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
GLubyte GLubyte GLubyte GLubyte w
float m_lineWidth
The line width for 2D ellipses or 3D wireframe ellipsoids (default=1)
void setQuantiles(float q)
Changes the scale of the "sigmas" for drawing the ellipse/ellipsoid (default=3, ~97 or ~98% CI); the ...
#define THROW_EXCEPTION(msg)
#define ASSERT_(f)
Defines an assertion mechanism.
void setLineWidth(float w)
The line width for 2D ellipses or 3D wireframe ellipsoids (default=1)
Virtual base class for "archives": classes abstracting I/O streams.
void renderGeneralizedEllipsoidTemplate(const std::vector< mrpt::math::CMatrixFixedNumeric< float, DIM, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
mrpt::poses::CPose3D m_pose
6D pose wrt the parent coordinate reference.
void generalizedEllipsoidPoints< 3 >(const mrpt::math::CMatrixFixedNumeric< double, 3, 3 > &U, const mrpt::math::CMatrixFixedNumeric< double, 3, 1 > &mean, std::vector< mrpt::math::CMatrixFixedNumeric< float, 3, 1 >> &out_params_pts, const uint32_t slices, const uint32_t stacks)
void setCovMatrixAndMean(const MATRIX &new_cov, const VECTOR &new_mean)
Set the NxN covariance matrix that will determine the aspect of the ellipsoid - Notice that the covar...
void keep_max(T &var, const K test_val)
If the second argument is above the first one, set the first argument to this higher value.
CGeneralizedEllipsoidTemplate()
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
A numeric matrix of compile-time fixed size.
void renderGeneralizedEllipsoidTemplate< 2 >(const std::vector< mrpt::math::CMatrixFixedNumeric< float, 2, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
void generalizedEllipsoidPoints< 2 >(const mrpt::math::CMatrixFixedNumeric< double, 2, 2 > &U, const mrpt::math::CMatrixFixedNumeric< double, 2, 1 > &mean, std::vector< mrpt::math::CMatrixFixedNumeric< float, 2, 1 >> &out_params_pts, const uint32_t slices, const uint32_t stacks)
mrpt::math::TPoint3D m_bb_max
void composePoint(double lx, double ly, double lz, double &gx, double &gy, double &gz, mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *out_jacobian_df_dpoint=nullptr, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dpose=nullptr, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dse3=nullptr, bool use_small_rot_approx=false) const
An alternative, slightly more efficient way of doing with G and L being 3D points and P this 6D pose...
A class that generalizes the concept of an ellipsoid to arbitrary parameterizations of uncertainty sh...
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.
This base provides a set of functions for maths stuff.
cov_matrix_t m_U
Cholesky U triangular matrix cache.
void generalizedEllipsoidPoints(const mrpt::math::CMatrixFixedNumeric< double, DIM, DIM > &U, const mrpt::math::CMatrixFixedNumeric< double, DIM, 1 > &mean, std::vector< mrpt::math::CMatrixFixedNumeric< float, DIM, 1 >> &out_params_pts, const uint32_t slices, const uint32_t stacks)
bool m_needToRecomputeEigenVals
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
void renderGeneralizedEllipsoidTemplate< 3 >(const std::vector< mrpt::math::CMatrixFixedNumeric< float, 3, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
uint32_t m_numSegments
Number of segments in 2D/3D ellipsoids (default=10)
unsigned __int32 uint32_t
virtual ~CGeneralizedEllipsoidTemplate()
virtual void transformFromParameterSpace(const std::vector< array_point_t > ¶ms_pts, std::vector< array_point_t > &out_pts) const =0
To be implemented by derived classes: maps, using some arbitrary space transformation,...
Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST | |