Add Transform3D `translated_local`, `rotated_local`, `scaled_local`
parent
3276688c82
commit
c543a3cbe1
|
@ -55,6 +55,7 @@ public:
|
||||||
Transform3D affine_inverse() const;
|
Transform3D affine_inverse() const;
|
||||||
|
|
||||||
Transform3D rotated(const Vector3 &p_axis, real_t p_phi) const;
|
Transform3D rotated(const Vector3 &p_axis, real_t p_phi) const;
|
||||||
|
Transform3D rotated_local(const Vector3 &p_axis, real_t p_angle) const;
|
||||||
|
|
||||||
void rotate(const Vector3 &p_axis, real_t p_phi);
|
void rotate(const Vector3 &p_axis, real_t p_phi);
|
||||||
void rotate_basis(const Vector3 &p_axis, real_t p_phi);
|
void rotate_basis(const Vector3 &p_axis, real_t p_phi);
|
||||||
|
@ -64,10 +65,12 @@ public:
|
||||||
|
|
||||||
void scale(const Vector3 &p_scale);
|
void scale(const Vector3 &p_scale);
|
||||||
Transform3D scaled(const Vector3 &p_scale) const;
|
Transform3D scaled(const Vector3 &p_scale) const;
|
||||||
|
Transform3D scaled_local(const Vector3 &p_scale) const;
|
||||||
void scale_basis(const Vector3 &p_scale);
|
void scale_basis(const Vector3 &p_scale);
|
||||||
void translate(real_t p_tx, real_t p_ty, real_t p_tz);
|
void translate(real_t p_tx, real_t p_ty, real_t p_tz);
|
||||||
void translate(const Vector3 &p_translation);
|
void translate(const Vector3 &p_translation);
|
||||||
Transform3D translated(const Vector3 &p_translation) const;
|
Transform3D translated(const Vector3 &p_translation) const;
|
||||||
|
Transform3D translated_local(const Vector3 &p_translation) const;
|
||||||
|
|
||||||
const Basis &get_basis() const { return basis; }
|
const Basis &get_basis() const { return basis; }
|
||||||
void set_basis(const Basis &p_basis) { basis = p_basis; }
|
void set_basis(const Basis &p_basis) { basis = p_basis; }
|
||||||
|
|
|
@ -63,7 +63,15 @@ void Transform3D::rotate(const Vector3 &p_axis, real_t p_phi) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D Transform3D::rotated(const Vector3 &p_axis, real_t p_phi) const {
|
Transform3D Transform3D::rotated(const Vector3 &p_axis, real_t p_phi) const {
|
||||||
return Transform3D(Basis(p_axis, p_phi), Vector3()) * (*this);
|
// Equivalent to left multiplication
|
||||||
|
Basis p_basis(p_axis, p_phi);
|
||||||
|
return Transform3D(p_basis * basis, p_basis.xform(origin));
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform3D Transform3D::rotated_local(const Vector3 &p_axis, real_t p_angle) const {
|
||||||
|
// Equivalent to right multiplication
|
||||||
|
Basis p_basis(p_axis, p_angle);
|
||||||
|
return Transform3D(basis * p_basis, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transform3D::rotate_basis(const Vector3 &p_axis, real_t p_phi) {
|
void Transform3D::rotate_basis(const Vector3 &p_axis, real_t p_phi) {
|
||||||
|
@ -133,9 +141,13 @@ void Transform3D::scale(const Vector3 &p_scale) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D Transform3D::scaled(const Vector3 &p_scale) const {
|
Transform3D Transform3D::scaled(const Vector3 &p_scale) const {
|
||||||
Transform3D t = *this;
|
// Equivalent to left multiplication
|
||||||
t.scale(p_scale);
|
return Transform3D(basis.scaled(p_scale), origin * p_scale);
|
||||||
return t;
|
}
|
||||||
|
|
||||||
|
Transform3D Transform3D::scaled_local(const Vector3 &p_scale) const {
|
||||||
|
// Equivalent to right multiplication
|
||||||
|
return Transform3D(basis.scaled_local(p_scale), origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transform3D::scale_basis(const Vector3 &p_scale) {
|
void Transform3D::scale_basis(const Vector3 &p_scale) {
|
||||||
|
@ -153,9 +165,13 @@ void Transform3D::translate(const Vector3 &p_translation) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D Transform3D::translated(const Vector3 &p_translation) const {
|
Transform3D Transform3D::translated(const Vector3 &p_translation) const {
|
||||||
Transform3D t = *this;
|
// Equivalent to left multiplication
|
||||||
t.translate(p_translation);
|
return Transform3D(basis, origin + p_translation);
|
||||||
return t;
|
}
|
||||||
|
|
||||||
|
Transform3D Transform3D::translated_local(const Vector3 &p_translation) const {
|
||||||
|
// Equivalent to right multiplication
|
||||||
|
return Transform3D(basis, origin + basis.xform(p_translation));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transform3D::orthonormalize() {
|
void Transform3D::orthonormalize() {
|
||||||
|
|
Loading…
Reference in New Issue