31#include <Eigen/Geometry>
60 return std::atan2(v(2), v.head<2>().norm());
63 double distance()
const {
return -_coeffs(3); }
68 double _azimuth = azimuth(v);
69 double _elevation = elevation(v);
70 return (
AngleAxis(_azimuth, Vector3::UnitZ()) *
77 double _azimuth = v[0];
78 double _elevation = v[1];
79 double s = std::sin(_elevation), c = std::cos(_elevation);
80 Vector3 n(c * std::cos(_azimuth), c * std::sin(_azimuth), s);
84 double d = distance() + v[2];
85 _coeffs.head<3>() = R * n;
92 Matrix3 R = rotation(normal()).transpose();
94 double d = distance() - plane.
distance();
95 return Vector3(azimuth(n), elevation(n), d);
100 double n = coeffs.head<3>().norm();
101 coeffs = coeffs * (1. / n);
111 v2.head<3>() = R * v.head<3>();
112 v2(3) = v(3) - t.translation().dot(v2.head<3>());
Vector3 ominus(const Plane3D &plane)
void fromVector(const Vector4 &coeffs_)
static Matrix3 rotation(const Vector3 &v)
static double elevation(const Vector3 &v)
Plane3D(const Vector4 &v)
const Vector4 & coeffs() const
void oplus(const Vector3 &v)
static double azimuth(const Vector3 &v)
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
static void normalize(Vector4 &coeffs)
#define G2O_TYPES_SLAM3D_ADDONS_API
some general case utility functions
Eigen::AngleAxis< double > AngleAxis
Line2D operator*(const SE2 &t, const Line2D &l)
Eigen::Transform< double, 3, Eigen::Isometry, Eigen::ColMajor > Isometry3