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]);
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++)
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);
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];
A numeric matrix of compile-time fixed size.
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.
GLAPI void GLAPIENTRY glEnable(GLenum cap)
GLAPI void GLAPIENTRY glVertex2f(GLfloat x, GLfloat y)
GLAPI void GLAPIENTRY glLineWidth(GLfloat width)
GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
GLAPI void GLAPIENTRY glBegin(GLenum mode)
GLAPI void GLAPIENTRY glVertex3fv(const GLfloat *v)
#define GL_ONE_MINUS_SRC_ALPHA
GLAPI void GLAPIENTRY glEnd(void)
GLAPI void GLAPIENTRY glDisable(GLenum cap)
#define ASSERT_EQUAL_(__A, __B)
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
#define ASSERT_ABOVEEQ_(__A, __B)
This base provides a set of functions for maths stuff.
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 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< 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 renderGeneralizedEllipsoidTemplate< 3 >(const std::vector< mrpt::math::CMatrixFixedNumeric< float, 3, 1 >> &pts, const float lineWidth, const uint32_t slices, const uint32_t stacks)
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)
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
The namespace for 3D scene representation and rendering.
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values,...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int32 uint32_t