假设我有 2 个坐标系,如附图所示
我怎样才能对齐这个坐标系?我知道我需要用 180 度平移 X 周围的第二个坐标系,然后将其转换到第一个坐标系的 (0, 0) ,但是这样做会得到错误的结果。将非常感谢任何详细的答案。
编辑:实际上,第二个坐标系的 (0, 0) 与第一个坐标系的 Y 位于同一点。
假设我有 2 个坐标系,如附图所示
我怎样才能对齐这个坐标系?我知道我需要用 180 度平移 X 周围的第二个坐标系,然后将其转换到第一个坐标系的 (0, 0) ,但是这样做会得到错误的结果。将非常感谢任何详细的答案。
编辑:实际上,第二个坐标系的 (0, 0) 与第一个坐标系的 Y 位于同一点。
重要的信息是第二个坐标系的原点在哪里 - 即(a,b)
。
一旦你知道了,你所需要的就是:
QPointF pos1; // original position
QTransform t;
t.scale(1, -1);
t.translate(a, -b+1);
QPointF pos2 = pos1 * t;
这是旋转 180 度的问题,它不仅会影响 Y 坐标的方向,还会影响 X。
YX <--+ ^ => | | v +--> XY
您可能打算做的是在 Y 处平移该点,然后反转您的 Y 坐标。你可以这样做:
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)
,这应该可以防止奇怪的光照/剔除行为。
您必须在以下位置找到正确的 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 是原点之间的偏移量。