crossplatform.ru

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


  Ответ в Определение точных координат на графике в контекстном меню
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 22.7.2009, 16:44
  Описание проблемы перемещения визира находится здесь
AD Дата 22.7.2009, 15:32
 
Цитата(BRE @ 21.7.2009, 22:59) *
Так вариантов нет, шаг в одну точку на экране это 8 точек на графике (при тех условиях которые я приводил выше). Точнее двигать мышь ты не сможешь. ;)

На мой взгляд, вариант Юрия и есть альтернатива указанному алгоритму. Сейчас, после того как поправил разбор времени (mktime), буду думать как его реализовать.
BRE Дата 21.7.2009, 21:59
 
Цитата(AD @ 21.7.2009, 22:25) *
А вот с координатами, выходит, надо искать метод, который сможет дать более точный результат. Т.е.
events -> pos() - не подходит.

Так вариантов нет, шаг в одну точку на экране это 8 точек на графике (при тех условиях которые я приводил выше). Точнее двигать мышь ты не сможешь. ;)

Цитата(AD @ 21.7.2009, 22:25) *
Ты знаешь как сделать предложенный Юрием курсор графика? Я вообще в не понимаю с чего начать для его реализации?

Нужно посмотреть, подумать.
У меня сейчас форум только по диагонале читать получается. Времени не много... :(
AD Дата 21.7.2009, 21:25
 
Цитата(BRE @ 21.7.2009, 19:54) *
Почему так происходит? Ведь ты работаешь с экранными координатами. :blink:

Не знаю разбираться придется завтра.

А вот с координатами, выходит, надо искать метод, который сможет дать более точный результат. Т.е.
events -> pos() - не подходит. Ты знаешь как сделать предложенный Юрием курсор графика? Я вообще в не понимаю с чего начать для его реализации?
BRE Дата 21.7.2009, 18:54
 
Цитата(AD @ 21.7.2009, 19:36) *
координаты те же. График тот же - то есть с погрешностью....

При длине вертикальной шкалы 800 единиц и размере виджета по вертикале 100 точек, при сдвиге мышки на одну точку шаг на графике будет составлять 8 единиц, при размере виджета 200 точек - 4 единицы.... От этого никуда не деться, только если не сделать длину оси в точках равной длине в единицах. :)

Цитата(AD @ 21.7.2009, 19:36) *
Визир - viewfinder. Не знаю почему нет плавности, но двигается скачкообразно.

Почему так происходит? Ведь ты работаешь с экранными координатами. :blink:
AD Дата 21.7.2009, 18:36
 
Цитата(BRE @ 21.7.2009, 19:19) *
Координаты те же выводятся в меню?
Что за визир? Почему нет плавности? :)

координаты те же. График тот же - то есть с погрешностью....

Визир - viewfinder. Не знаю почему нет плавности, но двигается скачкообразно.
BRE Дата 21.7.2009, 18:19
 
Цитата(AD @ 21.7.2009, 19:09) *
Ну... алгоритм ведь тот же. Единицу ток не вычитаем. Ничего не изменилось. Нет плавного перемещения визира.

Координаты те же выводятся в меню?
Что за визир? Почему нет плавности? :)
AD Дата 21.7.2009, 18:09
  Ну... алгоритм ведь тот же. Единицу ток не вычитаем. Ничего не изменилось. Нет плавного перемещения визира.
AD Дата 21.7.2009, 17:31
 
        double spanX() const { return maxX - minX; }
    double spanY() const { return maxY - minY; }

Так и определены :)
А функцию initXY(), попробую сейчас.
BRE Дата 21.7.2009, 15:33
 
Цитата(AD @ 21.7.2009, 16:11) *
Без проблем. Реализация этой функции в большей степени переписана из Бланшета и Саммерфилда:

А как определены spanX() и spanY()?

---

Попробуй так:
struct Settings
{
    double    minX;
    double    minY;
    double    maxX;
    double    maxY;
    double    numXTicks;
    double    numYTicks;

    double    spanX() const { return maxX - minX; }
    double    spanY() const { return maxY - minY; }
};

QPointF initXY( const QPoint &scr_coor )
{
    QRect rect( ... );

    // Если область графика занимает не всю площадь виджета, то проверяем находиться ли мышь над графиком
    if( !rect.contains( scr_coor ) )
        return QPointF( 0, 0 );

    double sx = settings.minX + double( scr_coor.x() - rect.left() ) * settings.spanX() / rect.width();
    double sy = settings.minY + double( rect.bottom() - scr_coor.y() ) * settings.spanY() / rect.height();

    return QPointF(sx, sy);
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 14:50