32 #if MRPT_HAS_OPENGL_GLUT
43 const size_t N = pts.size();
44 for (
size_t i = 0; i < N; i++)
glVertex2f(pts[i][0], pts[i][1]);
66 #if MRPT_HAS_OPENGL_GLUT
80 const size_t idx_1st_slice = 1;
85 for (
size_t i = 0; i < stacks; i++)
94 for (
size_t s = 0;
s < slices - 3;
s++)
96 size_t idx_this_slice = idx_1st_slice + stacks *
s;
97 size_t idx_next_slice = idx_this_slice + stacks;
99 for (
size_t i = 0; i < stacks; i++)
102 (i == (stacks - 1) ? 0 : i + 1);
117 const size_t idx_last_pt = pts.size() - 1;
118 const size_t idx_last_slice = idx_1st_slice + (slices - 3) * stacks;
120 for (
size_t i = 0; i < stacks; i++)
154 out_params_pts.clear();
155 out_params_pts.reserve(numSegments);
156 const double Aa = 2 *
M_PI / numSegments;
157 for (
double ang = 0; ang < 2 *
M_PI; ang += Aa)
159 const double ccos = cos(ang);
160 const double ssin = sin(ang);
162 out_params_pts.resize(out_params_pts.size() + 1);
164 Eigen::Matrix<float, 2, 1>& pt = out_params_pts.back();
166 pt[0] =
mean[0] + ccos * U.get_unsafe(0, 0) + ssin * U.get_unsafe(0, 1);
167 pt[1] =
mean[1] + ccos * U.get_unsafe(1, 0) + ssin * U.get_unsafe(1, 1);
172 const double x,
const double y,
const double z,
177 pts.resize(pts.size() + 1);
179 pt[0] =
mean[0] +
x * M.get_unsafe(0, 0) +
y * M.get_unsafe(0, 1) +
180 z * M.get_unsafe(0, 2);
181 pt[1] =
mean[1] +
x * M.get_unsafe(1, 0) +
y * M.get_unsafe(1, 1) +
182 z * M.get_unsafe(1, 2);
183 pt[2] =
mean[2] +
x * M.get_unsafe(2, 0) +
y * M.get_unsafe(2, 1) +
184 z * M.get_unsafe(2, 2);
202 std::vector<double> slice_cos(slices), slice_sin(slices);
203 for (
uint32_t i = 0; i < slices; i++)
205 double angle =
M_PI * i / double(slices - 1);
206 slice_sin[i] = sin(angle);
207 slice_cos[i] = cos(angle);
210 std::vector<double> stack_sin(stacks), stack_cos(stacks);
211 for (
uint32_t i = 0; i < stacks; i++)
213 double angle = 2 *
M_PI * i / double(stacks);
214 stack_sin[i] = sin(angle);
215 stack_cos[i] = cos(angle);
223 pts.reserve((slices - 2) * stacks + 2);
225 for (
uint32_t i = 0; i < slices; i++)
229 else if (i == (slices - 1))
233 const double x = slice_cos[i];
234 const double R = slice_sin[i];
236 for (
uint32_t j = 0; j < stacks; j++)
238 const double y =
R * stack_cos[j];
239 const double z =
R * stack_sin[j];
A numeric matrix of compile-time fixed size.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.
#define ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure.
#define ASSERT_ABOVEEQ_(__A, __B)
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)
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.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int32 uint32_t