![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Cergey |
![]() ![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 62 Регистрация: 18.10.2008 Пользователь №: 395 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!
Наверняка при изучении работы с 2D гдафикой видели следующий пример: Раскрывающийся текст
Рисование виджета начинается с маленького треугольника, который обозначает нулевую позицию вверху. Треугольник задается тремя, жестко зашитыми парами координат. Собственно рисование производится функцией drawConvexPolygon(). Треугольник можно было бы нарисовать функцией drawPolygon(), но если заранее известно, что многоугольник выпуклый, то вы можете сэкономить несколько микросекунд, за счет использования функции drawConvexPolygon(). Одна из замечательных сторон механизма перехода от логических координат к физическим состоит в том, что мы можем жестко зашивать координаты точек в исходный код и при этом получать неплохие результаты, при изменении размеров виджета.
Далее рисуются внешний и два внутренних круга. Внешний круг заполняется цветом "light" (обычно -- белый), Внутренние круги заполняются цветом "mid" (обычно -- серый).
Затем рисуются рукоятка и риски на лимбе. Напротив каждой пятой риски рисуется число, обозначающее количество минут. Функция rotate() вызывается для того, чтобы повернуть систему координат. В начальный момент, риска с отметкой "0" находилась вверху, теперь же она переместилась в точку, координаты которой зависят от оставшегося до срабатывания времени. Рукоятка рисуется после выполнения поворота, поскольку ее ориентация зависит от угла поворота. В цикле for, по краю внешнего круга рисуются риски, а под ними -- числа, обозначающие количество минут, с шагом 5. В конце каждой итерации выполняется поворот системы координат по часовой стрелке на 7 градусов, что соответствует одной минуте. Таким образом, каждая следующая риска будет рисоваться на своем месте, хотя координаты в drawLine() и drawText() задаются одни и те же. Мне не понятно
У Жасмин Бланшет написано про это: Сначала там поворачивают систему координат рисовальщика против часовой стрелки, затем рисуют рукоятку, а затем поворачивают рисовальщик по часовой стрелке и поэтому в цикле не надо изменять координаты в drawLine. Но ведь используется одна функция - rotate. Где не искал, везде ничего не исправлено. Если это правильно, может кто нибудь пожалуйста это объяснить!!! Сообщение отредактировал Litkevich Yuriy - 8.7.2009, 20:26
Причина редактирования: пользуйся тэгами code и expand
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Сначала там поворачивают систему координат рисовальщика против часовой стрелки, затем рисуют рукоятку, а затем поворачивают рисовальщик по часовой стрелке и поэтому в цикле не надо изменять координаты в drawLine. Я с этим примером не разбирался, но такого утверждения из приведённого тобой описания выше не вижу. А вижу только это:Одна из замечательных сторон механизма перехода от логических координат к физическим состоит в том, что мы можем жестко зашивать координаты точек в исходный код В конце каждой итерации выполняется поворот системы координат по часовой стрелке на 7 градусов, что соответствует одной минуте. Таким образом, каждая следующая риска будет рисоваться на своем месте, хотя координаты в drawLine() и drawText() задаются одни и те же. Т.е. в функцию drawLine() передаются абсолютные координаты, затем рисовальщик поворачивается - поворот один.
|
|
|
Cergey |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 62 Регистрация: 18.10.2008 Пользователь №: 395 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Если передаются абсолютные координаты, то первый поворот ничего не меняет, тогда всегда одинаковое изображение. Может тут все-таки ошибка???
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Cergey |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 62 Регистрация: 18.10.2008 Пользователь №: 395 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
это дело можно представить себе так:
Есть стол, на нём лист бумаги. когда рисуем штрихи и цифирки, то используются абсолютные координаты стола, а поворот осуществляем только листа, относительно его предыдущего положения. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 19:30 |