mirror of
https://github.com/openharmony/graphic_utils.git
synced 2026-07-01 21:44:51 -04:00
56fb909f5c
IssueNo: https://gitee.com/openharmony/graphic_utils/issues/I5W10S Feature or Bugfix: Bugfix Binary Source:No Signed-off-by: zhouyj <zhouyuanjie1@huawei.com>
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
/*
|
|
* Copyright (c) 2020-2021 Huawei Device Co., Ltd.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#include "gfx_utils/trans_affine.h"
|
|
|
|
namespace OHOS {
|
|
const TransAffine& TransAffine::RectToParl(float x1, float y1,
|
|
float x2, float y2,
|
|
const float* parl)
|
|
{
|
|
data_[0] = x2 - x1;
|
|
data_[3] = 0; // y1 - y1
|
|
data_[1] = x2 - x1;
|
|
data_[4] = y2 - y1;
|
|
data_[2] = x1;
|
|
data_[5] = y1;
|
|
Invert();
|
|
Multiply(TransAffine(parl[2] - parl[0], parl[3] - parl[1],
|
|
parl[4] - parl[0], parl[5] - parl[1],
|
|
parl[0], parl[1]));
|
|
return *this;
|
|
}
|
|
|
|
const TransAffine& TransAffine::Multiply(const TransAffine& metrix)
|
|
{
|
|
float t0 = data_[0] * metrix.data_[0] + data_[3] * metrix.data_[1];
|
|
float t2 = data_[1] * metrix.data_[0] + data_[4] * metrix.data_[1];
|
|
float t4 = data_[2] * metrix.data_[0] + data_[5] * metrix.data_[1] + metrix.data_[2];
|
|
data_[3] = data_[0] * metrix.data_[3] + data_[3] * metrix.data_[4];
|
|
data_[4] = data_[1] * metrix.data_[3] + data_[4] * metrix.data_[4];
|
|
data_[5] = data_[2] * metrix.data_[3] + data_[5] * metrix.data_[4] + metrix.data_[5];
|
|
data_[0] = t0;
|
|
data_[1] = t2;
|
|
data_[2] = t4;
|
|
return *this;
|
|
}
|
|
|
|
const TransAffine& TransAffine::Invert()
|
|
{
|
|
float d = DeterminantReciprocal();
|
|
|
|
float t0 = data_[4] * d;
|
|
data_[4] = data_[0] * d;
|
|
data_[3] = -data_[3] * d;
|
|
data_[1] = -data_[1] * d;
|
|
|
|
float t4 = -data_[2] * t0 - data_[5] * data_[1];
|
|
data_[5] = -data_[2] * data_[3] - data_[5] * data_[4];
|
|
|
|
data_[0] = t0;
|
|
data_[2] = t4;
|
|
return *this;
|
|
}
|
|
|
|
const TransAffine& TransAffine::Reset()
|
|
{
|
|
data_[1] = 0;
|
|
data_[2] = 0;
|
|
data_[3] = 0;
|
|
data_[5] = 0;
|
|
data_[6] = 0;
|
|
data_[7] = 0;
|
|
data_[0] = 1;
|
|
data_[4] = 1;
|
|
data_[8] = 1;
|
|
return *this;
|
|
}
|
|
|
|
bool TransAffine::IsIdentity() const
|
|
{
|
|
return MATH_FLT_EQUAL(data_[0], 1.0f) &&
|
|
MATH_FLT_EQUAL(data_[3], 0.0f) &&
|
|
MATH_FLT_EQUAL(data_[1], 0.0f) &&
|
|
MATH_FLT_EQUAL(data_[4], 1.0f) &&
|
|
MATH_FLT_EQUAL(data_[2], 0.0f) &&
|
|
MATH_FLT_EQUAL(data_[5], 0.0f);
|
|
}
|
|
|
|
bool TransAffine::IsValid(float epsilon) const
|
|
{
|
|
return (MATH_ABS(data_[0]) > epsilon) && (MATH_ABS(data_[4]) > epsilon);
|
|
}
|
|
} // namespace OHOS
|