[Impeller] Simplify calculation of Matrix::GetMaxBasisXY() (flutter/engine#51664)
Since 2D coordinates have a `Z` value of `0.0`, they don't need to include the Z basis vector in calculating a scale.
This commit is contained in:
@@ -352,6 +352,18 @@ TEST(GeometryTest, MatrixGetMaxBasisLengthXY) {
|
||||
auto m = Matrix::MakeScale({-3, 4, 7});
|
||||
ASSERT_EQ(m.GetMaxBasisLengthXY(), 4);
|
||||
}
|
||||
|
||||
{
|
||||
// clang-format off
|
||||
auto m = Matrix::MakeColumn(
|
||||
1.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f, 0.0f,
|
||||
4.0f, 0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
);
|
||||
// clang-format on
|
||||
ASSERT_EQ(m.GetMaxBasisLengthXY(), 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(GeometryTest, MatrixMakeOrthographic) {
|
||||
|
||||
@@ -202,14 +202,6 @@ Scalar Matrix::GetMaxBasisLength() const {
|
||||
return std::sqrt(max);
|
||||
}
|
||||
|
||||
Scalar Matrix::GetMaxBasisLengthXY() const {
|
||||
Scalar max = 0;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
max = std::max(max, e[i][0] * e[i][0] + e[i][1] * e[i][1]);
|
||||
}
|
||||
return std::sqrt(max);
|
||||
}
|
||||
|
||||
/*
|
||||
* Adapted for Impeller from Graphics Gems:
|
||||
* http://www.realtimerendering.com/resources/GraphicsGems/gemsii/unmatrix.c
|
||||
|
||||
@@ -292,7 +292,10 @@ struct Matrix {
|
||||
|
||||
Scalar GetMaxBasisLength() const;
|
||||
|
||||
Scalar GetMaxBasisLengthXY() const;
|
||||
constexpr Scalar GetMaxBasisLengthXY() const {
|
||||
return std::sqrt(std::max(e[0][0] * e[0][0] + e[0][1] * e[0][1],
|
||||
e[1][0] * e[1][0] + e[1][1] * e[1][1]));
|
||||
}
|
||||
|
||||
constexpr Vector3 GetBasisX() const { return Vector3(m[0], m[1], m[2]); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user