33 const std::vector<mrpt::math::CMatrixFixedNumeric<float, 2, 1>>& pts,
36 #if MRPT_HAS_OPENGL_GLUT 47 const size_t N = pts.size();
48 for (
size_t i = 0; i < N; i++)
glVertex2f(pts[i][0], pts[i][1]);
67 const std::vector<mrpt::math::CMatrixFixedNumeric<float, 3, 1>>& pts,
70 #if MRPT_HAS_OPENGL_GLUT 85 const size_t idx_1st_slice = 1;
90 for (
size_t i = 0; i < stacks; i++)
99 for (
size_t s = 0;
s < slices - 3;
s++)
101 size_t idx_this_slice = idx_1st_slice + stacks *
s;
102 size_t idx_next_slice = idx_this_slice + stacks;
104 for (
size_t i = 0; i < stacks; i++)
107 (i == (stacks - 1) ? 0 : i + 1);
122 const size_t idx_last_pt = pts.size() - 1;
123 const size_t idx_last_slice = idx_1st_slice + (slices - 3) * stacks;
125 for (
size_t i = 0; i < stacks; i++)
155 std::vector<mrpt::math::CMatrixFixedNumeric<float, 2, 1>>& out_params_pts,
159 out_params_pts.clear();
160 out_params_pts.reserve(numSegments);
161 const double Aa = 2 *
M_PI / numSegments;
162 for (
double ang = 0; ang < 2 *
M_PI; ang += Aa)
164 const double ccos = cos(ang);
165 const double ssin = sin(ang);
167 out_params_pts.resize(out_params_pts.size() + 1);
169 Eigen::Matrix<float, 2, 1>& pt = out_params_pts.back();
171 pt[0] =
mean[0] + ccos * U.get_unsafe(0, 0) + ssin * U.get_unsafe(0, 1);
172 pt[1] =
mean[1] + ccos * U.get_unsafe(1, 0) + ssin * U.get_unsafe(1, 1);
177 const double x,
const double y,
const double z,
182 pts.resize(pts.size() + 1);
184 pt[0] =
mean[0] +
x * M.get_unsafe(0, 0) +
y * M.get_unsafe(0, 1) +
185 z * M.get_unsafe(0, 2);
186 pt[1] =
mean[1] +
x * M.get_unsafe(1, 0) +
y * M.get_unsafe(1, 1) +
187 z * M.get_unsafe(1, 2);
188 pt[2] =
mean[2] +
x * M.get_unsafe(2, 0) +
y * M.get_unsafe(2, 1) +
189 z * M.get_unsafe(2, 2);
199 std::vector<mrpt::math::CMatrixFixedNumeric<float, 3, 1>>& pts,
208 std::vector<double> slice_cos(slices), slice_sin(slices);
209 for (
uint32_t i = 0; i < slices; i++)
211 double angle =
M_PI * i / double(slices - 1);
212 slice_sin[i] = sin(angle);
213 slice_cos[i] = cos(angle);
216 std::vector<double> stack_sin(stacks), stack_cos(stacks);
217 for (
uint32_t i = 0; i < stacks; i++)
219 double angle = 2 *
M_PI * i / double(stacks);
220 stack_sin[i] = sin(angle);
221 stack_cos[i] = cos(angle);
229 pts.reserve((slices - 2) * stacks + 2);
231 for (
uint32_t i = 0; i < slices; i++)
235 else if (i == (slices - 1))
239 const double x = slice_cos[i];
240 const double R = slice_sin[i];
242 for (
uint32_t j = 0; j < stacks; j++)
244 const double y =
R * stack_cos[j];
245 const double z =
R * stack_sin[j];
#define ASSERT_EQUAL_(__A, __B)
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
GLAPI void GLAPIENTRY glVertex3fv(const GLfloat *v)
GLAPI void GLAPIENTRY glEnable(GLenum cap)
#define GL_ONE_MINUS_SRC_ALPHA
GLAPI void GLAPIENTRY glLineWidth(GLfloat width)
GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
A numeric matrix of compile-time fixed size.
This base provides a set of functions for maths stuff.
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
void aux_add3DpointWithEigenVectors(const double x, const double y, const double z, std::vector< mrpt::math::CMatrixFixedNumeric< float, 3, 1 >> &pts, const mrpt::math::CMatrixFixedNumeric< double, 3, 3 > &M, const mrpt::math::CMatrixFixedNumeric< double, 3, 1 > &mean)
GLAPI void GLAPIENTRY glBegin(GLenum mode)
void renderGeneralizedEllipsoidTemplate< 3 >(const std::vector< mrpt::math::CMatrixFixedNumeric< float, 3, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
void renderGeneralizedEllipsoidTemplate< 2 >(const std::vector< mrpt::math::CMatrixFixedNumeric< float, 2, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define ASSERT_ABOVEEQ_(__A, __B)
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
The namespace for 3D scene representation and rendering.
GLAPI void GLAPIENTRY glEnd(void)
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)
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)
unsigned __int32 uint32_t
GLAPI void GLAPIENTRY glVertex2f(GLfloat x, GLfloat y)
GLAPI void GLAPIENTRY glDisable(GLenum cap)
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.