#pragma once #include "vde/core/point.h" #include namespace vde::core { using Transform3D = Eigen::Transform; inline Transform3D translate(const Vector3D& v) { return Transform3D(Eigen::Translation(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(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