Add is_conformal method to Basis and Transform2D
This commit is contained in:
parent
3ed4497113
commit
56806ffeed
9 changed files with 96 additions and 0 deletions
|
|
@ -96,6 +96,14 @@ bool Basis::is_orthogonal() const {
|
|||
return m.is_equal_approx(identity);
|
||||
}
|
||||
|
||||
bool Basis::is_conformal() const {
|
||||
const Vector3 x = get_column(0);
|
||||
const Vector3 y = get_column(1);
|
||||
const Vector3 z = get_column(2);
|
||||
const real_t x_len_sq = x.length_squared();
|
||||
return Math::is_equal_approx(x_len_sq, y.length_squared()) && Math::is_equal_approx(x_len_sq, z.length_squared()) && Math::is_zero_approx(x.dot(y)) && Math::is_zero_approx(x.dot(z)) && Math::is_zero_approx(y.dot(z));
|
||||
}
|
||||
|
||||
bool Basis::is_diagonal() const {
|
||||
return (
|
||||
Math::is_zero_approx(rows[0][1]) && Math::is_zero_approx(rows[0][2]) &&
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ struct _NO_DISCARD_ Basis {
|
|||
_FORCE_INLINE_ Basis operator*(const real_t p_val) const;
|
||||
|
||||
bool is_orthogonal() const;
|
||||
bool is_conformal() const;
|
||||
bool is_diagonal() const;
|
||||
bool is_rotation() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -164,6 +164,18 @@ Transform2D Transform2D::orthonormalized() const {
|
|||
return ortho;
|
||||
}
|
||||
|
||||
bool Transform2D::is_conformal() const {
|
||||
// Non-flipped case.
|
||||
if (Math::is_equal_approx(columns[0][0], columns[1][1]) && Math::is_equal_approx(columns[0][1], -columns[1][0])) {
|
||||
return true;
|
||||
}
|
||||
// Flipped case.
|
||||
if (Math::is_equal_approx(columns[0][0], -columns[1][1]) && Math::is_equal_approx(columns[0][1], columns[1][0])) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Transform2D::is_equal_approx(const Transform2D &p_transform) const {
|
||||
return columns[0].is_equal_approx(p_transform.columns[0]) && columns[1].is_equal_approx(p_transform.columns[1]) && columns[2].is_equal_approx(p_transform.columns[2]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ struct _NO_DISCARD_ Transform2D {
|
|||
|
||||
void orthonormalize();
|
||||
Transform2D orthonormalized() const;
|
||||
bool is_conformal() const;
|
||||
bool is_equal_approx(const Transform2D &p_transform) const;
|
||||
bool is_finite() const;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue