Java 在位置(槽)和坐标之间来回转换
基本上,想象一个宽度为9(从0开始)的基于位置的区域 然而,我并没有转换成坐标,并将位置0转换成(0,0),这基本上就是我想要得到的Java 在位置(槽)和坐标之间来回转换,java,math,Java,Math,基本上,想象一个宽度为9(从0开始)的基于位置的区域 然而,我并没有转换成坐标,并将位置0转换成(0,0),这基本上就是我想要得到的 ╔══════╦══════╦══════╦══════╦═════╦═════╦═════╦═════╦═════╗ ║ -4,1 ║ -3,1 ║ -2,1 ║ -1,1 ║ 0,1 ║ 1,1 ║ 2,1 ║ 3,1 ║ 4,1 ║ ║ -4,2 ║ -3,2 ║ -2,2 ║ -1,2 ║ 0,2 ║ 1,2 ║ 2,2 ║ 3,2 ║ 4,2 ║ ║ -
╔══════╦══════╦══════╦══════╦═════╦═════╦═════╦═════╦═════╗
║ -4,1 ║ -3,1 ║ -2,1 ║ -1,1 ║ 0,1 ║ 1,1 ║ 2,1 ║ 3,1 ║ 4,1 ║
║ -4,2 ║ -3,2 ║ -2,2 ║ -1,2 ║ 0,2 ║ 1,2 ║ 2,2 ║ 3,2 ║ 4,2 ║
║ -4,3 ║ -3,3 ║ -2,3 ║ -1,3 ║ 0,3 ║ 1,3 ║ 2,3 ║ 3,3 ║ 4,3 ║
╚══════╩══════╩══════╩══════╩═════╩═════╩═════╩═════╩═════╝
本质上,X值的中心是0,向左或向右移动,减小或增大。但是,我没有将y设置为中心,因为y值可以扩展到无穷大
我需要弄清楚如何用Java中的以下方法实现这一点
getPosition(int x, int y); //RETURNS (int position)
getCoordinates(int position) //RETURNS (int x, int y)
有什么想法吗?使用以下方法。注意,我使用
java.awt.Point
表示x
和y
方法中的getCoordinates(int-position)
坐标
public int getPosition(int x, int y) {
return ((y - 1) * 9) + (x + 4);
}
public Point getCoordinates(int position) {
//calculate x and y
int y = (int) ((position / 9) + 1);
int x = (position - ((y - 1) * 9)) - 4;
Point point = new Point(x, y);
return point;
}
你在找模数和除法吗?是的,我很确定这是一种方法,但我有问题。谢谢!看起来像我需要的,我来测试一下!是的,只是想测试一下。作品我强烈建议删除所有魔法数字,代之以最终数字。那么改变宽度就容易多了虽然它确实更适合更大的宽度,但我只使用了一次,宽度不会改变,因此我认为我不需要改变它。它工作得很好,我希望它是那样的。Channa Jayamuni准确地回答了我需要的,正如我在问题中所说的宽度是9
public int getPosition(int x, int y) {
return ((y - 1) * 9) + (x + 4);
}
public Point getCoordinates(int position) {
//calculate x and y
int y = (int) ((position / 9) + 1);
int x = (position - ((y - 1) * 9)) - 4;
Point point = new Point(x, y);
return point;
}