Программирование мобильных телефонов на Java


Программирование мобильных телефонов

  • Введение
  • Глава 1. Устройство мобильных телефонов
  • Глава 2. Платформа Java 2 Micro Edition
  • Глава 3. Средства разработки мобильных приложений
  • Глава 4. Телефонные эмуляторы
  • Глава 5. Механизм работы приложений Java 2 ME
  • Глава 6. Классы пользовательского интерфейса
  • Глава 7. Программирование графики
  • Глава 8. Техника создания игр
  • Глава 9. Мобильная мультимедиа-библиотека
  • Заключение
  • Приложение 1. Основы языка Java
  • Приложение 2. Справочник по Java 2 Micro Edition

     

    Программирование на Java

  • Введение
  • Глава 1. Встроенные типы данных, операции над ними
  • Глава 2. Объектно-ориентированное программирование в Java
  • Глава 3. Пакеты и интерфейсы
  • Глава 4. Классы-оболочки
  • Глава 5. Работа со строками
  • Глава 6. Классы-коллекции
  • Глава 7. Классы-утилиты
  • Глава 8. Принципы построения графического интерфейса
  • Глава 9. Графические примитивы
  • Глава 10. Основные компоненты
  • Глава 11. Размещение компонентов
  • Глава 12. Обработка событий
  • Глава 13. Создание меню
  • Глава 14. Апплеты
  • Глава 15. Изображения и звук
  • Глава 16. Обработка исключительных ситуаций
  • Глава 17. Подпроцессы
  • Глава 18. Потоки ввода/вывода
  • Глава 19. Сетевые средства Java
  • Приложение. Развитие Java

  • 

    3fb01dc2


     

     

    Класс AffineTransform

    Аффинное преобразование координат задается двумя основными конструкторами класса AffineTransform:

    AffineTransform(double a, double b, double с,

      double d, double e, double f) 

    AffineTransform (float a, float b, float c, float d, float e, float f)

    При этом точка с координатами (х, у) в пространстве пользователя перейдет в точку с координатами (а*х+с*у+е, b*x+d*y+f) в пространстве графического устройства.

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

    Следующие два конструктора используют в качестве аргумента массив (а, ь, с, d, e, f} или (а, ь, с, d}, если e = f = о, составленный из таких же коэффициентов в том же порядке:

    AffineTransform(double[] arr) 

    AffineTransform(float[] arr)

    Пятый конструктор создает новый объект по другому, уже имеющемуся, объекту:

    AffineTransform(AffineTransform at)

    Шестой конструктор — конструктор по умолчанию — создает тождественное преобразование:

    Af fineTransform ()

    Эти конструкторы математически точны, но неудобны при задании конкретных преобразований. Попробуйте рассчитать коэффициенты поворота на 57° вокруг точки с координатами (20, 40) или сообразить, как будет преобразовано пространство пользователя после выполнения методов:

    AffineTransform at =

    new AffineTransform(-1.5, 4.45, -0.56, 34.7, 2.68, 0.01); 

    g.setTransform(at);

    Во многих случаях удобнее создать преобразование статическими методами, возвращающими объект класса AffineTransform.

    getRotatelnstance (double angle) — возвращает поворот на угол angle, заданный в радианах, вокруг начала координат. Положительное направление поворота таково, что точки оси Ох поворачиваются в направлении к оси Оу. Если оси координат пользователя не менялись преобразованием отражения, то положительное значение angle задает поворот по часовой стрелке.

    • getRotatelnstance(double angle, double x, double у) — такой же поворот вокруг точки с координатами (х, у).
    • getScalelnstance (double sx, double sy) — изменяет масштаб по оси Ох в sx раз, по оси Оу — в sy раз.
    • getSharelnstance (double shx, double shy) — преобразует каждую точку (x, у) в точку (x+shx*y, shy*x+y).
    • getTranslatelnstance (double tx, double ty) — сдвигает каждую точку (х, у) в точку (x+tx, y+ty).

    Метод createinverse () возвращает преобразование, обратное текущему преобразованию.

    После создания преобразования его можно изменить методами:

    setTransform(AffineTransform at)

    setTransform(double a, double b, double c, double d, double e, double f)

    setToIdentity()

    setToRotation(double angle)

    setToRotation(double angle, double x, double y)

    setToScale(double sx, double sy)

    setToShare(double shx, double shy)

    setToTranslate(double tx, double ty)

    сделав текущим преобразование, заданное одним из этих методов. 

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

    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 () начинается с получения экземпляра д класса 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.

    Рис. 9.3. Преобразование координат

     

    -
    



    Copyright © vzlom-1.ru 2020-2021