isHitOnSticker function
Implementation
bool isHitOnSticker(Sticker currentSticker, Offset position, { Size scaleSize = const Size(0, 0) }) {
final centerX = currentSticker.offset.dx + currentSticker.width / 2;
final centerY = currentSticker.offset.dy + currentSticker.height / 2;
// 贴图位置矩阵
final transform = Matrix4.identity()
..translate(centerX, centerY)
..rotateZ(currentSticker.rotation)
..scale(currentSticker.scale)
..translate(-currentSticker.width / 2, -currentSticker.height / 2);
// 逆变换矩阵
final inverseTransform = Matrix4.inverted(transform);
// 将点击位置转换到贴图的局部坐标系
final localPosition = MatrixUtils.transformPoint(inverseTransform, position);
// 计算考虑 scaleSize 后的贴图范围
final adjustedWidth = currentSticker.width + scaleSize.width;
final adjustedHeight = currentSticker.height + scaleSize.height;
final adjustedLeft = -scaleSize.width / 2;
final adjustedTop = -scaleSize.height / 2;
// 判断点击位置是否在调整后的贴图范围内
if (localPosition.dx >= adjustedLeft && localPosition.dx <= adjustedLeft + adjustedWidth &&
localPosition.dy >= adjustedTop && localPosition.dy <= adjustedTop + adjustedHeight) {
return true;
}
return false;
}