Как использовать перевод AffineTransform?

Я спрашиваю не о том, как работает AffineTransform, а о том, как использовать его метод перевода.

Я много раз читал API, но до сих пор не понимаю, как это работает.

публичный недействительный перевод (двойной TX, двойной TY)

Объединяет это преобразование с преобразованием перевода. Это эквивалентно вызову concatenate(T), где T — AffineTransform, представленный следующей матрицей:

      [   1    0    tx  ]
      [   0    1    ty  ]
      [   0    0    1   ]

Вопросы:

  1. affineTransform.translate(100, 0) каким-то образом перемещает изображение на +100 пикселей вправо и +100 пикселей вниз. Почему это так?

  2. Нужно ли мне использовать translate() для перемещения изображений, если мне нужно перемещать изображения очень часто? Если нет, то каков рекомендуемый метод/способы перемещения моих вращающихся/повернутых изображений в кадре?


person user3437460    schedule 22.02.2015    source источник
comment
1- Как правило, да, он должен двигаться 100x и 0y, почему для его определения не требуется работающий пример. 2- это зависит. Обычно я создаю копию контекста Graphics перед его применением или сохраняю копию оригинала, в противном случае вам нужно будет отменить его. Помните, что любые переводы, которые вы применяете, накапливаются   -  person MadProgrammer    schedule 22.02.2015


Ответы (1)


affineTransform.translate(100, 0) каким-то образом перемещает изображение на +100 пикселей вправо и +100 пикселей вниз. Почему это так?

Вообще говоря, да, смещение отрисовки должно измениться на 100x и 0y, а это означает, что 0x0 позиция Graphics контекста теперь будет 100x0 от исходной точки исходного Graphics контекста.

Помните, что переводы накапливаются, это означает, что если вы ранее каким-то образом перевели контекст Graphics, теперь он будет добавлен к нему (первый перевод 0x100, второй перевод 100x0, теперь вы 100x100 от исходной точки исходного контекста Graphics...

Нужно ли мне использовать translate() для перемещения изображений, если мне нужно перемещать изображения очень часто? Если нет, то каков рекомендуемый метод/способы перемещения моих вращающихся/повернутых изображений в кадре?

Как правило, я использую Graphics#create для создания копии контекста Graphics (это копирует текущее состояние/свойства, но по-прежнему будет генерировать вывод обратно в исходный вывод контекста Graphics), применяю переводы к копии, рисую все, что хочу, и затем dispose копии. Это оставляет исходный контекст неизменным (в отношении свойств, которые я изменил)

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

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

person MadProgrammer    schedule 22.02.2015
comment
Очень ценю ваше решение. Однако вы можете объяснить, почему он смещается вниз и смещается вправо, когда я подаю только 100 для tx ? mathsisfun.com/definitions/translation.html показывает, что при задании tx 100 изображение должен сдвигаться вправо только на 100 пикселей. Но почему перевод Java также сдвигает его вниз? - person user3437460; 23.02.2015
comment
Нет, если вы не можете привести работающий пример. Вы можете взглянуть на этот вопрос, где я могу решить проблемы с начальным трансформация - person MadProgrammer; 23.02.2015