在Qt中设置椭圆的方向
我正在使用在Qt中设置椭圆的方向,qt,ellipse,qpainter,Qt,Ellipse,Qpainter,我正在使用QPainterPath通过三次鼠标点击绘制一个椭圆。椭圆的长轴和短轴保持与主坐标轴平行 第一次单击确定椭圆的中心。第二次单击的位置用于计算长轴的长度,第三次单击的位置用于确定短轴的长度 无论单击的位置如何,椭圆的轴都平行于主轴。如何根据鼠标单击的位置设置椭圆的方向 我计算了连接第一点和第二点的线的角度,如下所示: theta = atan2((p2.y()-p1.y()),(p2.x()-p1.x())) * (180/M_PI); 我的边框看起来像: QRectF MyEllip
QPainterPath
通过三次鼠标点击绘制一个椭圆。椭圆的长轴和短轴保持与主坐标轴平行
第一次单击确定椭圆的中心。第二次单击的位置用于计算长轴的长度,第三次单击的位置用于确定短轴的长度
无论单击的位置如何,椭圆的轴都平行于主轴。如何根据鼠标单击的位置设置椭圆的方向
我计算了连接第一点和第二点的线的角度,如下所示:
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);
如何根据这三个点使椭圆正确定向?我已使用我的
绘制功能中的平移和旋转操作解决了此问题,如下所示:
painter->save();
painter->translate(p1.x(), p1.y());
painter->rotate(theta);
painter->translate(-p1.x(), -p1.y());
painter->drawPath(ellipse);
painter->restore();
这将根据单击设置椭圆的形状
围绕角度θ进行旋转,计算如下:
theta = atan2((p2.y()-p1.y()),(p2.x()-p1.x())) * (180/M_PI);
如果p2和p1之间的距离>p3和p1之间的距离,则计算如下:
theta = atan2((p3.y()-p1.y()),(p3.x()-p1.x())) * (180/M_PI);
我已经能够通过坐标轴的平移和旋转以及再次平移来实现正确的方向。所以我把这个标记为已解决。当然我已经发布了。