在两个位置之间获取路径

Jazerix:

给定职位:

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));
    }
}

这样做很好,但是在结束位置是的情况下,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]]

我将如何实现这种解决方案?

luk2302:

如果只允许您向左,向右,向上和向下移动,则需要先执行X方向上的所有步骤,然后再执行Y方向上的所有步骤。这意味着两个for循环是彼此相继的,而不是嵌套的。

如果允许使用对角线步长(看起来),则通常需要计算需要执行多少步max(diffX, diffY)然后采取尽可能多的步骤,其中一些是对角线步骤:

Position oldPosition = new Position(10, 10);
Position newPosition = new Position(14, 12);

List<Position> fromOldToNewPositions = new ArrayList<>();
int differenceX = newPosition.getX() - oldPosition.getX();
int differenceY = newPosition.getY() - oldPosition.getY();

int steps = Math.max(differenceX, differenceY);
for (int step = 0; step <= steps; step++) {
    double part = step / (double)steps;
    fromOldToNewPositions.add(new Position((int)(oldPosition.getX() + differenceX * part), (int)(oldPosition.getY() + differenceY * part)));
}

[[10 | 10], [11 | 10], [12 | 11], [13 | 11], [14 | 12]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在iOS中的GMSMapView上的两个位置之间绘制路线

获取两个位置之间的路线点

mysql中的ST_Distance_Sphere无法提供两个位置之间的准确距离

R中地球上两个位置之间的距离

如何使用mapView和CLLocationManager在iOS Swift中绘制两个位置之间的方向

快速计算两个位置之间的距离

通过从EditText输入纬度和经度来计算两个位置之间的距离

Mkmapview中两个位置之间的多条路线

计算Excel工作表中两个位置之间的地理坐标距离

如何从用户输入获取两个位置之间的距离

无法使用ReactJS在OpenLayers中的两个位置之间绘制默认线

如何在两个位置之间连续移动GameObject?

获取两个位置之间的距离和时间的功能

寻找两个位置之间的距离

bing映射两个位置之间的直线

如何在iPhone应用程序中找到两个位置之间的方向?

如何使用GMSMapView在两个位置之间找到最短路径并绘制锯齿形路径?

Swift-在字符串的两个位置之间查找子字符串

给定纬度和经度,计算两个位置之间的行驶/行驶距离(必应地图)

使用Google Maps Api(JSON)获取两个位置之间的距离

bash:清除两个位置之间的字符串

在两个位置之间随机生成一个SKSpriteNode

使用Google Map API计算两个位置之间的距离

如何在两个位置之间更改文本的颜色?

iOS中两个位置之间的估计时间

使用地理编码获取两个位置之间的距离

获取java android中两个位置之间的距离

如何通过道路计算两个位置之间的距离?

在 Kotlin 中查找两个位置之间的距离