Я рисую эллипс, используя QPainterPath
, используя три мыши. Основная и малая оси эллипса остаются параллельными главной координатной оси.Установить ориентацию эллипса в Qt
Первый щелчок определяет центр эллипса. Позиция второго клика используется для вычисления длины большой оси, а для третьего - используется для определения длины вспомогательной оси.
Независимо от положения щелчков эллипс имеет ось, параллельную главной оси. Как настроить ориентацию эллипса в соответствии с положением мыши?
Я вычислил угол линии, соединяющей первую точку и вторую точку, как:
theta = atan2((p2.y()-p1.y()),(p2.x()-p1.x())) * (180/M_PI);
Мой ограничительный прямоугольник выглядит следующим образом:
QRectF MyEllipse::boundingRect() const
{
return QRectF(p1.x()-majRadius, p1.y()-minRadius, 2 * majRadius, 2 * minRadius).normalized();
}
Тогда я пишу его с помощью :
QPainterPath ellipse;
ellipse.moveTo(p2.x()*cos(theta),p2.y()*sin(theta));
ellipse.arcTo(boundingRect(), theta, theta+360);
QPen paintpen(Qt::black);
paintpen.setWidth(1);
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(paintpen);
painter->drawPath(ellipse);
Как получить эллипс правильно ориентированным в соответствии с тремя точками?
Я был способный достичь правильной ориентации, используя перевод и поворот осей координат, а затем снова перевод. Поэтому я отмечаю это как решение. –
Несомненно, я опубликовал его. –