Вращение CGAL по оси X в 3D

Есть ли предопределенный поворот по оси x в CGAL. Если нет, то почему? Если мне нужно определить это, как бы я это сделал?

#include <CGAL/Simple_cartesian.h>
#include <CGAL/Aff_transformation_3.h>
#include <cmath>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Aff_transformation_3<Kernel> transform3D;

transform3D rotationX(double angle)
{
    const double cosa{cos(angle)};
    const double sina{sin(angle)};
    return transform3D(
            1.0, 0.0, 0.0,
            0.0, cosa, -sina,
            0.0, sina, cosa);
}

void test()
{
    using Point3D = CGAL::Point_3<Kernel>;
    Point3D p{1.0,1.0,1.0};
    const transform3D rotate{rotationX(M_PI_2)};
    rotate(p);
}

person Markus Heitz    schedule 31.03.2015    source источник


Ответы (1)


Для вращения в 3D можно использовать Aff_transformation_3 и указать матрицу преобразования с помощью матрица преобразования.

Например: для поворота по оси x на определенный угол x можно использовать матрицу вида:

1   0        0         0
0   cos(x)   -sin(x)   0
0   sin(x)   cos(x)    0
0   0        0         1
person gue    schedule 04.05.2016