Affine transformation reversing

Тема в разделе "WASM.A&O", создана пользователем masquer, 21 апр 2005.

Статус темы:
Закрыта.
  1. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Некоторое время уже ломаю голову как мне вычислить начальные параметры (матрицы) если есть финальная матрица преобразований. Простые случаи (меньше 3) преобразований не интересны - там вычислять нечего зная порядок. А вот если одновременно над объектом применены поворот (rotate), перенос (transform), масштабирование по вертикали и горизонтали (scale) и скос по 2м углам (skew)...



    Есть ли какая методика вычисления начальных параметров, если порядок трансформаций известен? Насколько я успел облазить гугл, то точно вернуть не получится вообще :) но приблизительные параметры как-то же наверняка можно подобрать, которые бы соответствовали конечной матрице.



    Буду рад любой информации, которая помешает комплексу неполноценности овладеть мною :)
     
  2. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Возможно, если ты попробуешь различные численные примеры и убедишься в том, что для заданного rk (конечного вектора) и преобразований Ar,At,As и Askew существует множество различных rn (начальный вектор), дающих rk, то получится, что вряд ли получится найти rn по rk. Если же нет, то возможно можно вначале получить какие-то ограничения на каждый элемент rn (x,y,z,) и, далее, перебор ?
     
  3. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Упрощенно есть матрица вида
    Код (Text):
    1. [x1 x2]
    2. [x3 x4]
    полученная путем умножения матриц
    Код (Text):
    1. [Sx 0]\/[Cos0  Sin0]\/[1   tgA]
    2. [0 Sy]/\[-Sin0 Cos0]/\[tgB   1]


    Вот задача и найти эти матрицы. Получается система из 4-х уравнения с 5ю неизвестными. Вот так, как в анекдоте, и трахаюсь с этими 5ю неизвестными :)

    Из ограничений - ну 3 угла - от 0 до 360 каждый и масштабирование границ не имеет - поле для перебора, скажем так, огромное :)
     
  4. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Если можно, все же уточни условие. Известна пара rn,rk, надо найти X ? Или известно множество пар rn, rk и опять надо найти X ? Или есть матрица X, надо представить ее в виде трех матриц - найти (Sx, ... B) ?



    PS Это для скольки координат ? Двух (x,y) ?
     
  5. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    Да, есть только х1..х4 (собсно есть a, b, c, d, e, f - результирующая матрица), для 2D все, т.е. только x,y
     
  6. captain cobalt

    captain cobalt New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    222
    Адрес:
    /ru/perm
    ранг, базис, линейная комбинация. ;)
     
  7. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    а в виде fpu или псевдо-кода или на пальцах? :)

    хотя я кажется нашел метод устранения одного неизвестного - проверяю...
     
  8. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Я немного подумал - в общих чертах, без выкладок ;)



    Насчет skew я не нашел внятного описания, поэтому примем его и все остальное, те: (перенос+трансформ+масштаб)+skew.



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



    a'=a+delat_a;

    r'=r*k;



    в радиальных координатах (r,a) или матрица:



    [k*cos0 k*sin0]

    [-k*sin0 k*cos0]



    Те три преобразования в общем случае описываются всего 3-мя параметрами. А если ты хочешь получить 4-е параметра, то это будет бесконечное множество решений.



    Если что не так - сорри ;)
     
  9. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


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



    В общем решение такое, точнее их 2, но смысл один и тот же - скос по горизонтали (tgA) можно выразить как вращение или наоборот (т.е. если у нас объект был скошен на 5 градусов и повернут на 12, то в результате либо вращение либо скос в конце равен 17 градусам). Для объекта эти операции равнозначны, т.е. смысл конечной матрицы не изменился, а мы получаем возможность избавиться от мешающей нам 5й переменной и при этом значительно упрощаем поиск неизвестных параметров.
     
  10. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia


    На самом деле все достаточно просто ;)

    Смотреть надо в сторону матричных разложений:

    1. Полярного (почти то, что надо)

    2. SVD

    3. В собственном базисе.



    Почему первое - это почти то, что надо.

    Полярное (оно же QR-разложение) - суть приведение матрицы к произведению двух, одна из которых ортогональная (как раз те самые синус-косинус) и верхнетреугольной.

    Верхнетреугольная имеет вид

    [a b]

    [0 c]



    Представляя ее в виде произведения диагональной и верхнетреугольной, получаем искомое разложение.

    Дополнительный плюс - tg A = 0.



    Усе.



    PS: Читаем http://mathworld.wolfram.com/QRDecomposition.html и ссылки в некоторой eps-окрестности.
     
  11. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    aSL

    Спасибо, хоть терминологию буду знать :) А на имплементацию этого метода есть ссылки/решения, а то я системой уравнений решил, может более элегантное решение есть?
     
  12. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia


    Да не за что. Проблема-то классическая. И решена кучей способов лет эдак 200 назад точно.



    Как показывает практика, гугл рулит. Готовых реализаций - море. (И даже больше). А почитать, например, можно в:

    http://algolist.manual.ru/maths/linalg/index.php
     
  13. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Спасибо всем, думаю, тема себя исчерпала - вопросов больше нет :)
     
Статус темы:
Закрыта.