У меня есть график QCustomPlot с центром (0,0), я хочу добавить элемент эллипса вокруг всех данных на графике, но там я могу только установить верхнюю левую и нижнюю правую позиции эллипса, это показывает почти в центр графика, но он немного смещен, потому что я не в состоянии установить центр на эллипсе, так как центр не является точкой привязки
Кто-нибудь знает, как я мог бы установить центр моего элемента эллипса в (0,0)?
QCPItemEllipse *ellipse = new QCPItemEllipse(ui->customPlot);
ellipse->setAntialiased(true);
ellipse->topLeft->setCoords(lowestX, highestY);
ellipse->bottomRight->setCoords(highestX, lowestY);
Человек, положение центра эллипса определяется его верхней левой и нижней правой точками.
Например. center.x == (topLeft.x + bottomRight.x)/2
а также center.y == (topLeft.y + bottomRight.y)/2
, Вот как эллипсы работают в математике :).
В вашем коде центр будет в (0,0), если (lowestX + hightX) == 0
& (lowestY + hightY) == 0
,
Или, может быть, я не понимаю, о чем ты говоришь?
Если вы хотите легко переместить центр эллипса, вы можете создать класс, полученный из QCPItemEllipse
с полем QCPItemTracer *mCenterTracer
и со следующими вещами в конструкторе:
mCenterTracer->setStyle(QCPItemTracer::tsNone);
topLeft->setParentAnchor(mCenterTracer->position);
bottomRight->setParentAnchor(mCenterTracer->position);
topLeft->setCoords(-xRadius/2.0, -yRadius/2.0);
bottomRight->setCoords(xRadius/2.0, yRadius/2.0);
Так что метод перемещения центра (без изменения радиусов) будет выглядеть так:
void FreakingEllipse::moveCenter(double x, double y) {
mCenterTracer->position->setCoords(x, y);
}
Кстати, вы можете добавить следующее, если хотите, чтобы ваш эллипс имел постоянный радиус в пикселях, в то время как его центр по-прежнему привязан к координатам графика:
topLeft->setType(QCPItemPosition::ptAbsolute);
bottomRight->setType(QCPItemPosition::ptAbsolute);
Других решений пока нет …