Иллюстрированный самоучитель по Java

Преобразование координат. Класс AffineTransform.

Преобразования, заданные методами:

  • concatenate(AffineTransform at)
  • rotate(double angle)
  • rotate(double angle, double x, double y)
  • scale(double sx, double sy)
  • shear(double shx, double shy)
  • translate(double tx, double ty)

… выполняются перед текущим преобразованием, образуя композицию преобразований.

Преобразование, заданное методом preconcatenate(AffineTransform at), напротив, осуществляется после текущего преобразования.

Прочие методы класса AffineTransform производят преобразования различных фигур в пространстве пользователя.

Пора привести пример. Добавим в начало метода paint () в листинге 9.2 четыре оператора, как записано в листинге 9.3.

Листинг 9.3. Преобразование пространства пользователя.

// Начало листинга 9.2…
public void paint(Graphics gr){
Graphics2D g = (Graphics2D)gr;
AffineTransform at =
AffineTransform.getRotatelnstance(-Math.PI/4.0, 250.0.150.0);
at.concatenate(
new AffineTransform(0.5, 0.0, 0.0, 0.5, 100.0, 60.0));
g.setTransform(at);
Dimension d = getSize();
// Продолжение листинга 9.2

Метод paint () начинается с получения экземпляра g класса Graphics2D простым приведением аргумента gr к типу Graphics2D. Затем, методом getRotatelnstance () определяется поворот на 45° против часовой стрелки вокруг точки (250.0, 150.0). Это преобразование– экземпляр at класса AffineTransform. Метод concatenate (), выполняемый объектом at, добавляет к этому преобразованию сжатие в два раза по обеим осям координат и перенос начала координат в точку (100.0, 60.0). Наконец, композиция этих преобразований устанавливается как текущее преобразование объекта g методом setTransform().

Преобразование выполняется в следующем порядке. Сначала пространство пользователя сжимается в два раза вдоль обеих осей, затем начало координат пользователя – левый верхний угол – переносится в точку (100.0, 60.0) пространства графического устройства. Потом картинка поворачивается на угол 45° против часовой стрелки вокруг точки (250.0, 150.0).

Результат этих преобразований показан на рис. 9.3.

Иллюстрированный самоучитель по Java › Графические примитивы › Преобразование координат. Класс AffineTransform.
Рис. 9.3. Преобразование координат

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.