Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QGraphicscene,如何基于中心点放置项目_C++_Qt_Qgraphicsview_Qgraphicsscene - Fatal编程技术网

C++ QGraphicscene,如何基于中心点放置项目

C++ QGraphicscene,如何基于中心点放置项目,c++,qt,qgraphicsview,qgraphicsscene,C++,Qt,Qgraphicsview,Qgraphicsscene,我有一个QGraphicscene,我已经确定了我的中心点在哪里,但我现在需要根据这些信息找出如何在场景中放置我的项目 我有两个数据需要处理:范围和方位 范围显然是距离中心点(或我的位置)的距离,方位是距离中心点的方向,0表示北,180表示南,依此类推 例如,如果我需要将一个项目放置在范围:20,方位:90,项目将直接位于中心点右侧20(单位)。当前,使用此数据放置项目是基于场景左上角的0,0 这一切都需要能够和QGraphicscene的缩放状态一起缩放 我完全搞不懂这种转换。不确定如何通过从

我有一个QGraphicscene,我已经确定了我的中心点在哪里,但我现在需要根据这些信息找出如何在场景中放置我的项目

我有两个数据需要处理:范围和方位

范围显然是距离中心点(或我的位置)的距离,方位是距离中心点的方向,0表示北,180表示南,依此类推

例如,如果我需要将一个项目放置在范围:20,方位:90,项目将直接位于中心点右侧20(单位)。当前,使用此数据放置项目是基于场景左上角的0,0

这一切都需要能够和QGraphicscene的缩放状态一起缩放


我完全搞不懂这种转换。

不确定如何通过从一个坐标系转换到另一个坐标系来获得正确的偏移量,我设法找到了解决方案。希望它不会被认为是一个太多的黑客工作

首先,我需要从左上角(0,0)偏移,并且知道我的场景是360,360,这很容易

我不是一个数学爱好者,我不确定是否能得到角度,但经过一些研究后,我发现我得到的信息正是推导向量所需要的

下面是我编写的帮助我在QGraphicscene中生成项目的方法

QPointF Mainwindow::pointLocation(double bearing, double range){
    int offset = 90; //used to offset Cartesian system
    double centerX = 180;//push my center location out to halfway point
    double centerY = 180;
    double newX = centerX + qCos(qDegreesToRadians(bearing - offset)) * range;
    double newY = centerY + qSin(qDegreesToRadians(bearing - offset)) * range;
    QPointF newPoint = QPointF(newX, newY);
    return newPoint;

}