Где разница между «преобразованием» и «аффинным преобразованием»? - PullRequest
6 голосов
/ 19 мая 2009

Есть такая функция, как:

CATransform3DGetAffineTransform

Возвращает аффинное преобразование. представлен 'т'. Если «т» не может быть точно представлен как аффинный преобразовать возвращаемое значение не определено.

Я не настолько ориентирован на математику, поэтому простое для понимания описание было бы очень приятно. Википедия здесь не сильно помогла.

Ответы [ 3 ]

7 голосов
/ 19 мая 2009

Аффинные преобразования - это преобразования, которые не "чрезмерно искажают" вашу геометрию в том смысле, что:

  • точки, которые лежат на линии до того, все еще лежат на линии после преобразования
  • относительные расстояния между точками остаются неизменными (таким образом, квадрат может больше не быть квадратным, но все равно имеет равные длины сторон)

Таким образом, вращение и масштабирование являются аффинными - например, проекция - нет.

1 голос
/ 03 мая 2011

Аффинные преобразования - это преобразования, но преобразования не обязательно должны быть аффинными. Например, сдвиг плоскости не является аффинным, поскольку он не отправляет строки в строки.

Аффинные преобразования по определению являются теми преобразованиями, которые сохраняют отношения расстояний и посылают линии в линии (сохраняя «коллинеарность»). В конечномерной евклидовой геометрии они действуют линейным преобразованием, за которым следует перевод, т.е. x -> Ax + b, где x - вектор, A - линейное преобразование, а b - вектор.

Аффинные преобразования отлично подходят для изменения систем координат, возможно, из той, которую довольно трудно визуализировать, обратно в обычные координаты.

Аффинные преобразования, с которыми вы, вероятно, столкнетесь на практике, - это переводы, дилатация (то есть масштабирование), вращение и отражение. Например, если вы разрабатываете для iOS, ознакомьтесь с разделами CGAffineTransform документации для разработчиков. Они объяснят, как создавать аффинные преобразования, используя несколько удобных методов, и как применять их к экземплярам UIView с сообщением -setTransform.

Наконец, важным моментом в отношении аффинных преобразований является то, что они не являются коммутативными при композиции: применение преобразования T1 с последующим преобразованием T2 в целом отличается от применения T2, за которым следует T1. То есть порядок, в котором вы применяете эти вопросы.

0 голосов
/ 19 мая 2009

CoreAnimation использует 3D-преобразования. Аффинные преобразования являются двумерным подмножеством этих трехмерных преобразований. Они допускают только перемещение, вращение и масштабирование в плане X, Y.

...