27 lines
972 B
C++
27 lines
972 B
C++
#pragma once
|
|
#include "vde/core/point.h"
|
|
#include <Eigen/Geometry>
|
|
|
|
namespace vde::core {
|
|
|
|
using Transform3D = Eigen::Transform<double, 3, Eigen::Affine>;
|
|
|
|
inline Transform3D translate(const Vector3D& v) {
|
|
return Transform3D(Eigen::Translation<double, 3>(v));
|
|
}
|
|
inline Transform3D translate(double x, double y, double z) {
|
|
return translate(Vector3D(x, y, z));
|
|
}
|
|
inline Transform3D rotate(const Vector3D& axis, double angle_rad) {
|
|
return Transform3D(Eigen::AngleAxis<double>(angle_rad, axis.normalized()));
|
|
}
|
|
inline Transform3D rotate_x(double rad) { return rotate(Vector3D::UnitX(), rad); }
|
|
inline Transform3D rotate_y(double rad) { return rotate(Vector3D::UnitY(), rad); }
|
|
inline Transform3D rotate_z(double rad) { return rotate(Vector3D::UnitZ(), rad); }
|
|
inline Transform3D scale(double sx, double sy, double sz) {
|
|
return Transform3D(Eigen::Scaling(sx, sy, sz));
|
|
}
|
|
inline Transform3D scale(double s) { return scale(s, s, s); }
|
|
|
|
} // namespace vde::core
|