| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QPainter, QTransform и координаты |
| Автор: alammer 29.10.2014, 12:39 | ||
| Здравствуйте! Объясните один момент:) Qt 4.8.1, Ubuntu 12.04 Мне надо нарисовать X кружков, а потом соединить их линиями по некоторму алгоритму. Для рисования окружностей я использую painter.rotate(). А для того, чтобы потом иметь их координаты в общей системе влепил костыль на QTransform. Про QTransform прочитал вскользь в хелпах. Костыль заработал почти с 1 раза, но я теперь не понимаю как:) Вот кусок кода:
получается, что QTransform::map() преобразовывает текущие коор-ты матрицы сразу в начальные коор-ты (т.е. в систему с центром painter.translate(wid / 2, hei / 2); ), но в хелпе ничего на эту тему не нашел. Чего я не понимаю? |
| Автор: Amp 29.10.2014, 13:04 |
| Зачем тебе вообще понадобились трансформации для рисования кругов вдоль окружности? Не проще было ручками посчитать координаты центров в зависимости от угла и радиуса? |
| Автор: alammer 29.10.2014, 13:16 |
| за вычетом матрицы у меня на цикл рисования ушло около 2 минут подскажите как проще/быстрее подсчитать координаты для произвольного количества окружностей? |
| Автор: Amp 29.10.2014, 22:32 |
| Умножать радиус на синус и косинус текущего угла, очевидно же. |
| Автор: math64 30.10.2014, 09:10 |
| Все окружности рисуются одним пером и закрашиваются одной кистью? Используй QPainterPath - вычисляется один раз, если изменилсь высота/ширина. Если цвета разные, для каждого цвета отдельный QPainterPath. С синусами и косинусами возиться не надо. Исплользуй QTransform. |
| Автор: alammer 30.10.2014, 13:58 |
| всем спасибо, оказалось, что rotate QPainter-a и rotate Qtransformer-a по умолчанию вращают в противоположные стороны, отсюда и возникала необходимая компенсация тему можно удалять |