Как стать автором
Обновить

Комментарии 25

Когда вы пишите «вектор», — вы что имеете ввиду? Набор чисел или разность точек аффинного пространства (как вектор трансляции, например)? Барицентрические координаты у вас приведены для точек, а в тексте везде про векторы.

И еще. Как вы объясняете (или интерпретируете) наличие строки из единиц в матрицах аффинных преобразований?
1) Я работал в векторных (не аффинных) пространствах и мыслил векторы как их элементы (то есть первый подход). Понимаю, что барицентрические координаты можно определять уже для точек аффиного пространства, а в векторных пространствах точек как таковых нет. Я действительно, неформально обошелся с точками и векторами, зачастую заменяя точки на координаты векторов, которые на них указывают.
2) Я думаю, можно стать на проективную точку зрения — считать что векторы заданы в плоскости w=1 в пространстве размерности на 1 больше и считать что мы находим линейное преобразование там. Вообще, формула имеет проективный привкус. Например, можно избавиться от знаменателя (и минуса перед детерминантом), если ввести однородные координаты (с 1 в качестве последней) для выходных векторов.
Вопрос: «Аффинное преобразование по трем точкам на плоскости»
А почему получается, что для выполнения алгоритма нужны три точки, Ведь для восстановления преобразования достаточно двух? Что будет, если выходной треугольник, который я задам будет неравен/неподобен входному?
1) Для восстановления двумерного аффинного (не линейного) преобразования понадобятся три точки. Ведь мы хотим найти четыре числа в матрице 2x2 и вектор трансляции (еще два числа) — итого шесть чисел. Для этого нужно 6 уравнений. Поэтому мы должны знать, куда перешли три точки, так как каждая точка имеет две координаты и даст два уравнения. И всего их будет как раз шесть.
2) Выходной треугольник может быть совсем непохож на входной. Он может даже «жить» в другом пространстве (например, цветовом). Аффинное преобразование так исказит входное пространство, что два треугольника совпадут. Картинка с Леной показывает, что выходный треугольник (крайний слева) вовсе не подобен входному (крайний справа).
А, вот в чем дело… Я перепутал афинное преобразование с более узким классом преобразований.
Для тех кто прогулял первый курс
Зря вы так.
Знание алгоритма != умению увидеть его применимость для решаемой задачи.
По себе знаю.
Чем отличается вектор-аргумент от вектора-параметра? Если не до конца понятно, то добавлю — аргумент и параметр — синонимы, что делает масло масляным (а названия — бессмысленными).

Определитель — это число. То есть в вашей формуле имеет место деление двух чисел, с получением на выходе, очевидно, тоже числа. При этом в самом начале речь идёт о векторах. Отсюда вывод — надо пояснять детали.

Математики вообще не склонны к обсуждению деталей, мол умный студент всё сам за них додумает, но это неправильно, это убивает интерес у тех, кто видит несколько вариантов объяснения деталей, ну а городить свою теорию вокруг каждого варианта — нет времени. При этом все мы знаем, что правильный вариант — один, поэтому огород вокруг всех остальных вариантов — часто просто банальное (и безжалостное) убийство времени изучающего по вине преподавателя. И да, обучающихся много, в сумме они убивают гигантское время, а всё потому, что преподавателю лень расписывать детали (на что требуется минимальное время).

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

Аналогия с компьютером — он не будет работать, если вы ему не объясните всё до мелочей. А вот студент умнее, да, он иногда будет работать без объяснения мелочей, только все остальные сразу убегут от вашего предмета, да и умные убьют гораздо больше времени на обучение.

Хотя само желание что-то пояснить популярно — приветствуется.
1) Между параметрами и аргументами(переменными) есть разница. Формула (1) в самом общем виде задаёт целое семейство (параметризованное) аффинных преобразований и как раз параметры определяют, какое конкретно преобразование мы хотим выбрать, а аргумент — вектор, на который мы этим готовым преобразованием действуем. То, что они входят в формулу симметрично, не должно скрывать, что концепутально у них разный смысл.
2) Матрица в числителе в своей первой строке содержит векторы, что приводит к тому, что её детерминант тоже вектор. Тогда как в знаменателе действительно будет число. Это необычная конструкция и я писал, что это напоминает выражение для векторного произведения — там в результате взятия детерминанта тоже будет вектор. Я также упомянул, что такие детерминанты можно брать с помощью обычных правил и показал это на примерах. Вполне естественно, что наша формула выдает именно вектор, ведь аффинное преобразование действуя на вектор возвращает вектор (так что всё сходится). Да что там, в детерминанты можно не только вектора, но и дифференциальные операторы запихивать (оператор Гамильтона).
3) На мой взгляд, математики крайне внимательны к деталям. Однако, в научно-популярных статьях некритические детали допустимо скрывать, чтобы не перегрузить читателя. Однако, я дал ссылку на статью, где все изложено более строго.
Чем отличается вектор-аргумент от вектора-параметра? Если не до конца понятно, то добавлю — аргумент и параметр — синонимы, что делает масло масляным (а названия — бессмысленными).

Знаете ли вы термины, которые бы разделили их лучше?


Вот у нас есть преобразование f, работающее как функция из одного векторного пространства в другое. Вот у этой функции есть аргумент x: f(x). А есть параметры, от которых зависит сама функция f. Иногда эту зависимость просто подразумевают, но когда хотят подчеркнуть — пишут их индексом: fc(x). Знаете ли вы слова, которые позволят отличать c и x в этой формуле друг от друга?

Я понимаю так: параметр можно внести в функцию как константу, а аргумент — уже нет, иначе функция потеряет заложенный в неё смысл. Например, в обратной тригонометрической функции arcsin(x)+2·pi·k параметр это k.
Спасибо за интересную статью :)

Спасибо. Вопрос: если требуется аффинное преобразование на плоскости не для трёх точек (треугольника), а больше - как в этих случаях поступают? Мне в голову не приходит ничего, кроме как провести триангуляцию фигуры. Но при этом могут возникнуть артефакты. Есть другие способы?

Использовать некоторое взвешенное среднее.

Для начала, в таких случаях надо понять что требуется на выходе. Преобразования, которое бы преобразовало указанным образом произвольное количество точек, может и не существовать — и нужен критерий (целевая функция) сравнения какое из неточных преобразований более подходит.


Обычно в качестве целевой функции используют сумму квадратов норм разности образа и заданной точки, главным образом потому что у этой задачи есть простое аналитическое решение. Это называется МНК — метод наименьших квадратов.

МНК, естественно, надо будет применить. Вопрос в выборе самого преобразования.

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

Этого не могу себе позволить. Там карта.

Ну, для карт аффинные преобразования подходят только для очень небольших площадей местности. Первые десятки километров.

У меня меньше, скорее, километры.

А из-за чего возникли большие неточности? Высокие широты?

Зависит от задачи. Если точно известно, что преобразование афинное, просто точек много, они шумные и есть выбросы, то применяют, например, методы вроде RANSAC.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации