我在以下坐标系中有一点:
Java AWT:
0,0|------------------------|
| |
| (middle p. 400,300) |
| |
|------------------------|800,600
我希望将其转换为以下系统:
的OpenGL
50,50|------------------------|
| |
| (middle p. 0,0) |
| |
|------------------------|-50,-50
知道我该怎么做?
答案 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中减去该值。