![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| IDVsbruck |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Решение моей задачи напоминает мне сборку пазла из однополюсно заряженных магнитов ... еще чуть-чуть и сложится ... но в последний момент не складывается.
Задача тривиальная: надо задать текст, повернуть на определенный угол и сместить на определенное расстояние. Допустим (для простоты) надо подписать часовые метки на часах.
Возможно, код не совсем рабочий, потому как сваян тут, потому что я свою задачу постарался свести к минимуму (к примитивному примеру), но суть от этого не меняется. Вопросы следующие: 1. Можно ли сделать вращение и перенос не двумя, а одним афинным преобразованием? 2. (самое важное!) Все эти преобразования работают с текстом, заданным неким прямоугольником, беря за точку приложения левую среднюю точку этого прямоугольника - (0; textLayout.getBounds().getHeight()/2). В результате этого при выводе текста все числа становятся смещенными по часовой стрелке относительно правильных позиций - соответственно, строка "I" меньше всех, а "VIII" больше всех. Что надо сделать, чтобы правильно отобразить текст? Дополнительно: почему если применять простое афинное преобразование tx.translate(100, 0) - работает, а tx.translate(99, 0) - нет; tx.translate(5, 0) работает, а tx.translate(10, 0) - нет? Спасибо большое за любой дельный совет - голова уже идет набекрень. Это сообщение отредактировал(а) IDVsbruck - 29.1.2007, 12:33 |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Невозможно. Вы можете задавать точку, относительно которой будет выполнен поворот. См. javadoc по AffineTransform.getRotateInstance(double, double, double). Насчет остального... возмите лист бумаги и напишите на нем что-нибудь. Затем поверните -------------------- ![]() ![]() |
|||
|
||||
| IDVsbruck |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Да, все же, наверное, я просто запутался ... утро вечера мудренее ...
Для правильной установки по центру надо сделать после tx.rotate(angle - Math.PI/2); выражение tx.translate(-tl.getBounds().getWidth()/2, 0); И все! Все показывается отлично. Спасибо. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |