29 const std::vector<mrpt::math::CMatrixFixedNumeric<float, 2, 1>>& pts,
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]);
63 const std::vector<mrpt::math::CMatrixFixedNumeric<float, 3, 1>>& pts,
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++)
150 std::vector<mrpt::math::CMatrixFixedNumeric<float, 2, 1>>& out_params_pts,
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);
194 std::vector<mrpt::math::CMatrixFixedNumeric<float, 3, 1>>& pts,
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];
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 ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure.
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)
#define ASSERT_ABOVEEQ_(__A, __B)
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.
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.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.