crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Масштабирование, системы координат.
za-ek
  опции профиля:
сообщение 13.7.2012, 12:16
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 12.7.2012
Пользователь №: 3448

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте!
Пишу графическое приложение на Qt 4.6, замучался с перемещением центра.. Имеется QGraphicsScene и QGraphicsView.
Задача.
При приближении и отдалении сцены необходимо, что бы под мышкой остались те же координаты, т.е., пример :
Центр сцены расположен в точке {0;0}, мышь находится в точке {-20;-20} (в системе координат сцены), теперь функцией QGraphicsView::scale(scaleFactor,scaleFactor) приближаю сцену, центр остаётся на месте, следовательно, точка под мышью съезжает, она станет {-16,-16}, есть три системы координат:
1. QGraphicsScene (x вправо, y вниз, центр посередине)
2. QGraphicsView (x вправо, y вниз, центр в верхнем левом углу)
3. Система координат центра сцены (x влево, y вверх)

Я перепробовал уже тучу вариантов, по идее, должно быть так :
Центр должен быть смещён на величину смещения мыши относительно 3й системы координат + смещение центра 1й системы координат, умноженное на scaleFactor.
Но в этом случае центр улетает совсем не туда куда надо, помогите, пожалуйста, в математике вроде не дуб, но не выходит совсем..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.7.2012, 16:07
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


тоже как-то бился над похожей задачей, но не в Qt

чисто алгоритмически решение следующее:

пусть точка А0 (на экране) - это проекция точки А1 сцены с масштабом М1. После применения масштаба М2 проекция точки А2 сцены должна остаться на том же месте. Если представить все три поверхности на расстоянии (а мы как бы сверху смотрим на точку А0 , совпадающую с А1 и А2) , то получается такой пирог:

Прикрепленное изображение


линия А0-А1-А2 является прямой, перпендикулярной всем трём поверхностям

ключевой момент - работа с вектором, показанным красным сплошным цветом. Синим показаны оси системы координат - именно они будут "отъезжать"

И ещё одна грабля: когда, к примеру, колесом меняют масштаб, коэффициент масштабирования (раз/оборот колеса) нужно линейно менять. Если он будет постоянным, то масштабирование будет производиться с ускорением, а не быть равномерным

Сообщение отредактировал Алексей1153 - 13.7.2012, 16:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.2.2025, 18:03