Найти значение масштаба из CGAffineTransform - PullRequest
7 голосов
/ 15 октября 2011

Хорошо, я понимаю, что могу найти значение масштаба из CATransform3D слоя следующим образом:

 float scale = [[layer valueForKeyPath: @"transform.scale"] floatValue];

Но я не могу понять, как мне найти значение масштаба из CGAffineTransform. Скажем, например, у меня есть этот CGAffineTransform под названием «cameraTransform»:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
CGAffineTransform *cameraTransform =  imagePicker.cameraViewTransform;

Теперь, как мне получить значение масштаба из cameraTransform?

Ответы [ 3 ]

6 голосов
/ 18 августа 2014

Я пытаюсь дать общий ответ для всех видов CGAffineTransforms, даже повернутых.

Предполагается, что ваш CGAffineTransform содержит (необязательно)

  • вращение
  • перевод
  • масштабирование

и

  • НЕТ перекоса

тогда есть общая формула, которая дает вам коэффициент масштабирования:

CGAffineTransform transform = ...;
CGFloat scaleFactor = sqrt(fabs(transform.a * transform.d - transform.b * transform.c));

«Отражение» или переключение направлений координат будут игнорироваться, это означает, что (x -> -x; y -> y) приведет к scaleFactor == 1 вместо -1.

2 голосов
/ 15 октября 2011

http://en.wikipedia.org/wiki/Determinant

"Геометрическая интерпретация может быть дана значению определителя квадратной матрицы с действительными значениями: абсолютное значение определителя дает масштабный коэффициент, на который умножается площадь или объемпри соответствующем линейном преобразовании, в то время как его знак указывает, сохраняет ли преобразование ориентацию. Таким образом, матрица 2 × 2 с определителем -2 при применении к области плоскости с конечной площадью преобразует эту область в единицу с удвоенной площадью,изменяя ориентацию. "

В статье приводятся формулы для определителя матрицы 3х3 и матрицы 2х2.CGAffineTransforms представляют собой матрицы 3x3, но их правый столбец всегда равен 0 0 1. В результате определитель будет равен определителю верхнего левого квадрата 2x2 матрицы.Таким образом, вы можете использовать значения из структуры и самостоятельно вычислить масштаб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...