Учитывая позицию:
class Position {
private int x, y;
public Position(int x, int y) {
this.x = x;
this.y = y;
}
Я хотел бы рассчитать разницу между двумя такими позициями, а затем вернуть список позиций, которые дойдут до конца.
Например:
Position oldPosition = new Position(10, 10);
Position newPosition = new Position(12, 10);
Должен возвращать список с [[10,10], [11,10], [12,10]]
.
Мой текущий код:
Position oldPosition = new Position(10, 10);
Position newPosition = new Position(12, 12);
List<Position> fromOldToNewPositions = new ArrayList<>();
int differenceX = newPosition.getX() - oldPosition.getX();
int differenceY = newPosition.getY() - oldPosition.getY();
boolean xNegative = differenceX < 0;
boolean yNegative = differenceY < 0;
for (int x = oldPosition.getX(); xNegative && x >= newPosition.getX() || !xNegative && x <= newPosition.getX(); x = xNegative ? x - 1 : x + 1) {
for (int y = oldPosition.getY(); yNegative && y >= newPosition.getY() || !yNegative && y <= newPosition.getY(); y = yNegative ? y - 1 : y + 1) {
fromOldToNewPositions.add(new Position(x, y));
}
}
Это хорошо, но в сценарии ios где конечная позиция равна 12,12
, возвращается список: [[10,10], [10,11], [10,12], [11,10], [11,11], [11,12], [12,10], [12,11], [12,12]]
, где я хотел бы, чтобы результат был [[10,10], [11,11], [12,12]]
.
Как бы я go добился такого решения?