c++ - QGraphicsScene,如何根据中心点放置项目

标签 c++ qt qgraphicsview qgraphicsscene

我有一个 QGraphicsScene,我已经确定了我的中心点在哪里,但我现在需要弄清楚如何根据该信息将我的项目放置在场景中。

我有 2 条数据需要处理:距离和方位。

Range 显然是距离中心点(或我的位置)有多远,而方位角是中心点的方向,0 为北,180 为南等。

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

这一切都需要能够随着 QGraphicsScene 的缩放状态进行缩放。

我完全迷失了这种转变。

最佳答案

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

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

我不是数学专业的人,我不确定如何获取角度,但经过一些研究后,我发现我所拥有的信息正是推导 vector 所需的信息。

这是我为帮助我在 QGraphicsScene 中生成项目而编写的方法。

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;

}

关于c++ - QGraphicsScene,如何根据中心点放置项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40531438/

相关文章:

qt - QGraphicsView 滚动和图像缩放/裁剪

c++ - 运行 Opencv 示例代码时出错

android - 为 QLineEdit 选择输入键盘类型

Qt 应用程序断言在第二次启动时失败

c++ - QGraphicsPixmapItem 不显示在 QGraphicsView 中

c++ - 列表项的动画/重绘 Qt QListView

c++ - 尝试运行 cocos2dx Debug.win32 时缺少 appcrt140d.dll。 dll从哪里获取?

c++ - 改变音频的节奏(速度)

c++ - 构建 Openssl 源代码以编译 boost

c++ - 类型注册后如何在 QML 信号处理程序中捕获 C++ 信号?