Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Определение расстояния от позиции курсора до кривых



  • Добрый день
    Есть задача определить ближайшую кривую

    void viewer::mouseMoveEvent(QMouseEvent *e) 
    {
    qglviewer::Vec xx(e->pos().x(), e->pos().y(), 1);
    qglviewer::Vec xxx = this->camera()->unprojectedCoordinatesOf(xx);
    float dist1track = std::numeric_limits<float>::max();
    for(int i = 0; i < wtrjF.size(); i++)
    {
           Atom atom = wtrjF[i];
           for(float t = 0; t < atom.pos.size(); t++)
           {
               if(dist1track > qSqrt(qPow(atom.pos[t][0] - xxx[0], 2) + qPow(atom.pos[t][1] - xxx[1], 2)))
               {
                   dist1track = qSqrt(qPow(atom.pos[t][0] - xxx[0], 2) + qPow(atom.pos[t][1] - xxx[1], 2));
                   name = atom.wname;
                   wid = atom.wid;
                   pos = QString::number(atom.pos[0][0]) + "_" + QString::number(atom.pos[0][1]);
               }
           }
    }
    qDebug()<<name<<dist1track;
    }
    

    Но кривая определяется неверно
    Возможно, неверно конвертируются координаты мыши
    Пробовал множество всевозможных вариантов, приведенный выше работает точнее, но все равно криво
    Также пробовал:

    qglviewer::Vec xx = camera()->pointUnderPixel(e->pos(), found);
    qglviewer::Vec xx(e->pos().x(), e->pos().y(), 0);
    glReadPixels(e->pos().x(), view[3] - e->pos().y(), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z1);
    qglviewer::Vec xx(e->pos().x(), e->pos().y(), z1);
    

    Буду признателен за советы

    0_1545749346927_2.png
    Нарисовал линию от позиции курсора до ближайшей точки, координаты мыши определяются неверно


Log in to reply