4

我在以下坐标系中有一点:

Java AWT:

0,0|------------------------|
   |                        |
   |  (middle p. 400,300)   |
   |                        |
   |------------------------|800,600

我想将其转换为以下系统:

OpenGL

  50,50|------------------------|
       |                        |
       |     (middle p. 0,0)    |
       |                        |
       |------------------------|-50,-50

知道我该怎么做吗?

4

2 回答 2

5

通常,您要做的是将(矩形)坐标系转换A为坐标系B

首先将源坐标系映射A到标准化范围[0, 1]

double nx = x / (x1 - x0);
double ny = y / (y1 - y0);

(x0, y0)左上角在哪里,右下角在哪里(x1, y1)。然后将其映射到新的坐标系:

double px = X0 + nx * (X1 - X0);
double py = Y0 + ny * (Y1 - Y0);

(X0, Y0)新坐标系的左上角在哪里,新坐标系(X1, Y1)的右下角在哪里。

这适用于任何两个直角坐标系。

于 2012-07-03T15:21:54.263 回答
2
public Point awtToOpenGL(Point p) {
  Point newP = new Point();
  newP.setX(50 - (p.getX() / 8));
  newP.setY(50 - (p.getY() / 6));
  return newP;
}

[编辑] 弄错了 origo。新尝试。

由于 openGL 系统是 100 宽而 AWT 是 800 宽,我们需要将 x 值除以 8。按照相同的逻辑,y 需要除以 6。由于 x 和 y 都从 50 开始并向下,所以我们需要然后是从 50 中减去该值。

于 2012-07-03T14:38:58.497 回答