Как нарисовать график для траектории, которая идет влево и вправо по оси х? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу нарисовать траекторию в х и у автомобиля на стоянке.

траектория в х не всегда в одном направлении.когда-нибудь машина уедет налево.

проблема здесь в том, что когда-то (не всегда!) график не будет двигаться влево по оси х.Вы можете увидеть два разных результата на изображении https://imgur.com/Z53fNkt

Есть идеи, почему?

Изображение слева - это то, что я ожидаю.справа те же значения, но я продолжаю чертить данные немного дольше.

void TrackingResultsView::setupTrajectoryPlot()
{
QCustomPlot *customPlot = ui->qcp_trajectory;

customPlot->xAxis2->setVisible(true);
customPlot->xAxis2->setLabel("X-Position (pixel)");
customPlot->xAxis2->setRange(0, mModelPtr->frameSize().width());
customPlot->xAxis2->grid()->setVisible(true);

customPlot->xAxis->setRange(0, mModelPtr->frameSize().width());
customPlot->yAxis->setLabel("Y-Position (pixel)");
customPlot->yAxis->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis->setRangeReversed(true);

customPlot->yAxis2->setVisible(true);
customPlot->yAxis2->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis2->grid()->setVisible(true);
customPlot->yAxis2->setRangeReversed(true);
customPlot->addGraph(customPlot->xAxis2, customPlot->yAxis);

QVector<QVector<double>> data = createDataMap(mModelPtr->points());
customPlot->graph()->setData(data.at(0), data.at(1), true);

setTheme(customPlot, false);
}

спасибо

(английский не мой первый язык)

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

вот мой новый код с помощью оливера. его работа!

QCustomPlot *customPlot = ui->qcp_trajectory;

customPlot->xAxis2->setVisible(true);
customPlot->xAxis2->setLabel("X-Position (pixel)");
customPlot->xAxis2->setRange(0, mModelPtr->frameSize().width());
customPlot->xAxis2->grid()->setVisible(true);

customPlot->xAxis->setRange(0, mModelPtr->frameSize().width());
customPlot->yAxis->setLabel("Y-Position (pixel)");
customPlot->yAxis->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis->setRangeReversed(true);

customPlot->yAxis2->setVisible(true);
customPlot->yAxis2->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis2->grid()->setVisible(true);
customPlot->yAxis2->setRangeReversed(true);

customPlot->addGraph(customPlot->xAxis2, customPlot->yAxis);

// create empty curve objects:
QCPCurve *trajectory = new QCPCurve(customPlot->xAxis2, customPlot->yAxis);

// generate the curve data points:
const int pointCount = mModelPtr->points().size();
QVector<QCPCurveData> datatrajectory(pointCount);
QVector<QVector<double>> data = createDataMap(mModelPtr->points());

for (int i = 0; i < pointCount ; ++i)
{
    datatrajectory[i] = QCPCurveData(i, data.at(0).at(i), data.at(1).at(i));

}

trajectory->data()->set(datatrajectory, true);
setTheme(customPlot, false);
0 голосов
/ 15 мая 2019

Кажется, что QCPGraph используется для отсортированных данных только со значением на ключ.Из документации QCustomPlot выглядит, что QCPCurve будет лучшим соответствием для построения графика траектории (множественное значение для одного и того же ключа).

Из описания QCPCurve:

В отличие от QCPGraph, графические таблицы этого типа могут иметь несколько точек с одинаковой ключевой координатой, поэтому их визуальное представление может иметь петли.Это достигается введением третьей координаты t, которая определяет порядок точек, описываемых двумя другими координатами x и y.

...