将点从坐标系(0,800)转换为坐标系(50,-50)jFrame< - > opengl

时间:2012-07-03 14:33:32

标签: java math opengl awt coordinates

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

Java AWT:

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

我希望将其转换为以下系统:

的OpenGL

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

知道我该怎么做?

2 个答案:

答案 0 :(得分: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)位于新坐标系的右下角。

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

答案 1 :(得分:2)

public Point awtToOpenGL(Point p) {
  Point newP = new Point();
  newP.setX(50 - (p.getX() / 8));
  newP.setY(50 - (p.getY() / 6));
  return newP;
}

[编辑]原来是错的。新尝试。

由于openGL系统是100宽,AWT是800宽,我们需要将x值除以8.同样的逻辑y需要除以6.因为x和y都从50开始并且全部下降我们需要做的是从50中减去该值。