【发布时间】:2012-01-25 20:54:40
【问题描述】:
我似乎在这里有点数学失败......我需要将一个(x,y)点从一个坐标空间转换到另一个坐标空间 - 不是从极坐标到笛卡尔或任何类似的意义上。 ..只是从一个绑定到另一个。即,对于落在左下角(-100,-100)和右上角(100,100)的矩形中的特定(x,y),我需要找出该点在左下角(0 ,0) 和右上角 (500, 500)。
我觉得这只是简单的数学运算,但我花了很长时间才把它弄对......
这是一个用java编写的小型计算机图形程序。本质上,有一个剪辑窗口会发生变化,并且该剪辑窗口需要填满整个视图窗口。剪辑和视图的初始值由上述矩形按顺序给出。但是,剪辑可能会更改为,例如,左下角 (-80, -65) 和右上角 (75, 65) 的矩形。然后,我需要将该矩形内的点转换为视图窗口内的点(左下 (0,0),右上 (500, 500))
这是我现在所拥有的:
public int normalizeX(float x) {
float clipWidth = clipRight - clipLeft;
int viewWidth = viewRight - viewLeft;
x += 100; //Get x into range [0, 200] instead of [-100, 100]
//First convert x to value within clip width, then "scale" to viewport width
return (int)(((clipWidth*x)/200) * (viewWidth/clipWidth));
}
public int normalizeY(float y) {
float clipHeight = clipTop - clipBottom;
int viewHeight = viewTop - viewBottom;
y += 100; //Get y into range [0, 200] instead of [-100, 100]
//First convert y to value within clip height, then "scale" to viewport height
return (int)(((clipHeight*y)/200) * (viewHeight/clipHeight));
}
感谢您的帮助!
【问题讨论】:
-
硬编码的
[0, 200]和[-100, 100]是从哪里来的? -
感谢吉恩的提醒。 James,这些值来自这样一个事实,即所有形状,无论是剪辑或视图窗口,都定义在 (-100, -100), (100, 100) 范围内。
标签: java math coordinate