EnclosingEllipsoid.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @author Fabian Reister ( fabian dot reister at kit dot edu )
17 * @date 2021
18 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19 * GNU General Public License
20 */
21
22#pragma once
23
24#include <vector>
25
26#include <Eigen/Core>
27#include <Eigen/Geometry>
28
30
32{
33
34 // struct Ellipsoid
35 // {
36 // Eigen::Vector2f center;
37 // float angle;
38
39 // Eigen::Vector2f radii;
40
41 // Eigen::Affine2f pose() const noexcept;
42 // };
43
45
46 /**
47 * @brief Minimum volume enclosing ellipsoid (MVEE) for a set of points.
48 *
49 * See https://de.mathworks.com/matlabcentral/fileexchange/9542-minimum-volume-enclosing-ellipsoid
50 *
51 */
53 {
54 public:
55 using Point = Eigen::Vector2f;
56 using Points = std::vector<Point>;
57
58 EnclosingEllipsoid(const Points& points);
59
60 private:
61 /**
62 * @brief Computes the enclosing ellipsoid for the given points by using Khachiyan's Algorithm.
63 *
64 * The implementation is based on
65 * https://github.com/minillinim/ellipsoid/blob/master/ellipsoid.py
66 *
67 * @return true
68 * @return false
69 */
70 bool compute(const Points& points);
71 };
72
73} // namespace armarx::navigation::components::laser_scanner_feature_extraction