4

假设我有 2 个坐标系,如附图所示 在此处输入图像描述

我怎样才能对齐这个坐标系?我知道我需要用 180 度平移 X 周围的第二个坐标系,然后将其转换到第一个坐标系的 (0, 0) ,但是这样做会得到错误的结果。将非常感谢任何详细的答案。

编辑:实际上,第二个坐标系的 (0, 0) 与第一个坐标系的 Y 位于同一点。

4

3 回答 3

2

重要的信息是第二个坐标系的原点在哪里 - 即(a,b)

一旦你知道了,你所需要的就是:

QPointF pos1; // original position
QTransform t;
t.scale(1, -1);
t.translate(a, -b+1);
QPointF pos2 = pos1 * t;
于 2013-09-02T17:51:21.637 回答
0

这是旋转 180 度的问题,它不仅会影响 Y 坐标的方向,还会影响 X。

YX <--+
^ => |
| v
+--> XY

您可能打算做的是在 Y 处平移该点,然后反转您的 Y 坐标。你可以这样做:

  1. 将 Y 转换为新的原点
  2. 比例 (1, -1)
Y +--> X
^ => |
| v
+--> XY


经过更多的思考,我不得不怀疑,你为什么要首先进行这种转变?是因为 OpenGL 坐标和 Qt 用于其窗口的坐标不同吗?

如果是这种情况,您实际上可以更改投影矩阵...如果您使用的是正交矩阵,例如:

尝试glOrtho (0, X, 0, Y, -1, 1);代替传统的glOrtho (0, X, Y, 0, -1, 1);

如果您选择这样做,您可能需要更改多边形“正面”的缠绕方向。OpenGL 默认为 CCW,将其更改为glFrontFace (GL_CW),这应该可以防止奇怪的光照/剔除行为。

于 2013-08-31T19:57:09.387 回答
0

您必须在以下位置找到正确的 a、b、c、d、Ox、Oy 值:

X = a * x + b * y + Ox

Y = c * x + d * y + Oy

其中 x,y 是一个系统中该点的坐标,而 X,Y 是另一个系统中的坐标。

在您的情况下,a = 1,b = 0,c = 0,d = -1。Ox,Oy 是原点之间的偏移量。

https://en.wikipedia.org/wiki/Change_of_basis

于 2013-08-31T18:37:54.433 回答