![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
[attachment=708:graphics...rdinates.JPG]
Проблема в том, что координаты на осях и координаты в контекстном меню не совпадают. Как получить точные координаты от графика? Вот так реализовано меню:
Есть мысли, где возможна ошибка? |
|
|
![]() |
BRE |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
У нас есть виджет на котором рисуется график.
Его размер в точках - sizeWidget, пусть будет sizeWidget.x = 200, sizeWidget.y = 100. Есть позиция мыши внутри этого виджета, пусть будет posMouse.x = 180, posMouse.y = 23. Есть размер системы координат графика sizeGraph, пусть будет sizeGraph.x = 1000, sizeGraph.y = 200. Что бы получить значение координаты мыши делаем: point.x = posMouse.x * sizeGraph.x / sizeWidget.y -> point.x = 180 * 1000 / 200 = 900. График рисуется по формуле y = f(x), подставляем полученное значение по горизонтали и получаем point.y. Сообщение отредактировал BRE - 21.7.2009, 13:38 |
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
У нас есть виджет на котором рисуется график. Его размер в точках - sizeWidget, пусть будет sizeWidget.x = 200, sizeWidget.y = 100. Есть позиция мыши внутри этого виджета, пусть будет posMouse.x = 180, posMouse.y = 23. Есть размер системы координат графика sizeGraph, пусть будет sizeGraph.x = 1000, sizeGraph.y = 200. Что бы получить значение координаты мыши делаем: point.x = posMouse.x * sizeGraph.x / sizeWidget.y -> point.x = 180 * 1000 / 200 = 900. График рисуется по формуле y = f(x), подставляем полученное значение по горизонтали и получаем point.y. Дело в том, что приблизительно такой алгоритм и используется.
initXY(&events -> pos()) - как раз и переводит в координаты графика. Что указанная функция initXY работает правильно - я уверен - проверено и давно. Все дело в координатах events -> pos(), которые выдаются с погрешностью, которая недопустима. |
|
|
BRE |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Все дело в координатах events -> pos(), которые выдаются с погрешностью, которая недопустима. Ты уверен, что эти координаты возвращаются с погрешностью? ![]() Попробуй добавить вывод в консоль этих координат и посмотреть что выводиться. P.S. Покажи функцию initXY. Сообщение отредактировал BRE - 21.7.2009, 15:06 |
|
|
AD |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
P.S. Покажи функцию initXY. Без проблем. Реализация этой функции в большей степени переписана из Бланшета и Саммерфилда:
|
|
|
BRE |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Без проблем. Реализация этой функции в большей степени переписана из Бланшета и Саммерфилда: А как определены spanX() и spanY()? --- Попробуй так:
Сообщение отредактировал BRE - 21.7.2009, 17:17 |
|
|
AD |
![]()
Сообщение
#7
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Так и определены ![]() А функцию initXY(), попробую сейчас. |
|
|
AD |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Ну... алгоритм ведь тот же. Единицу ток не вычитаем. Ничего не изменилось. Нет плавного перемещения визира.
|
|
|
BRE |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#10
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#11
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
координаты те же. График тот же - то есть с погрешностью.... При длине вертикальной шкалы 800 единиц и размере виджета по вертикале 100 точек, при сдвиге мышки на одну точку шаг на графике будет составлять 8 единиц, при размере виджета 200 точек - 4 единицы.... От этого никуда не деться, только если не сделать длину оси в точках равной длине в единицах. ![]() Визир - viewfinder. Не знаю почему нет плавности, но двигается скачкообразно. Почему так происходит? Ведь ты работаешь с экранными координатами. ![]() |
|
|
AD |
![]()
Сообщение
#12
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Почему так происходит? Ведь ты работаешь с экранными координатами. ![]() Не знаю разбираться придется завтра. А вот с координатами, выходит, надо искать метод, который сможет дать более точный результат. Т.е. events -> pos() - не подходит. Ты знаешь как сделать предложенный Юрием курсор графика? Я вообще в не понимаю с чего начать для его реализации? Сообщение отредактировал AD - 21.7.2009, 21:27 |
|
|
BRE |
![]()
Сообщение
#13
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
А вот с координатами, выходит, надо искать метод, который сможет дать более точный результат. Т.е. events -> pos() - не подходит. Так вариантов нет, шаг в одну точку на экране это 8 точек на графике (при тех условиях которые я приводил выше). Точнее двигать мышь ты не сможешь. ![]() Ты знаешь как сделать предложенный Юрием курсор графика? Я вообще в не понимаю с чего начать для его реализации? Нужно посмотреть, подумать. У меня сейчас форум только по диагонале читать получается. Времени не много... ![]() Сообщение отредактировал BRE - 22.7.2009, 7:54 |
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Так вариантов нет, шаг в одну точку на экране это 8 точек на графике (при тех условиях которые я приводил выше). Точнее двигать мышь ты не сможешь. ![]() На мой взгляд, вариант Юрия и есть альтернатива указанному алгоритму. Сейчас, после того как поправил разбор времени (mktime), буду думать как его реализовать. |
|
|
AD |
![]()
Сообщение
#15
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Описание проблемы перемещения визира находится здесь
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 2.6.2025, 7:36 |