【发布时间】:2021-01-31 18:40:47
【问题描述】:
我正在开发一个基本程序,其中 2 名玩家在 30x30 大小的 2D 板上必须到达 2D 板上某处的 A*A 大小的较小网格(我们称之为地毯)。我需要计算哪个球员更接近地毯。我知道如何计算到地毯左上角的距离(因为我使用 x 和 y 坐标来绘制它),但不知道如何计算到地毯最近点的距离,例如在地毯底部的中间。
【问题讨论】:
标签: java path-finding
我正在开发一个基本程序,其中 2 名玩家在 30x30 大小的 2D 板上必须到达 2D 板上某处的 A*A 大小的较小网格(我们称之为地毯)。我需要计算哪个球员更接近地毯。我知道如何计算到地毯左上角的距离(因为我使用 x 和 y 坐标来绘制它),但不知道如何计算到地毯最近点的距离,例如在地毯底部的中间。
【问题讨论】:
标签: java path-finding
这更像是一个算法问题,而不是 java。你能澄清一下我们掌握的关于地毯的信息吗?我们有地毯的坐标吗?我们有玩家的坐标吗?
假设您有正方形 A*A 地毯角的坐标,您可以简单地计算出哪个玩家到地毯角或其边的欧几里得距离更短。这可以通过创建地毯拥有的坐标列表来完成。
请记住这是伪代码,请不要只是将代码复制到您的 IDE 中而因为它没有通过您的测试而感到沮丧。
所以步骤是:
假设您有一个单位方形地毯,角在 (1,1), (-1,1), (-1,-1), (1,-1)。
ArrayList<String> rugCoordinates = new ArrayList<String>();
//first add all corners
rugCoordinates.add("(1,1)");
rugCoordinates.add("(-1,1)");
rugCoordinates.add("(-1,-1)");
rugCoordinates.add("(1,-1)");
现在您需要将沿线的点添加到列表中。您可以通过上升/运行获得点之间的斜率,例如,在 (-1,1) 和 (1,1) = 0 斜率之间。
slope = (yCoordTarget-yCoordSource)/(xCoordTarget-xCoordSource);
for(int i = xCoordSource; i < xCoordTarget, i++){
rugCoordinates.add(i, i+slope);
}
最后比较玩家的最小距离。
if (findMinEuclideanDistance(player1) < findMinEuclideanDistance(player2)){
return player1;
else{
return player2;
}
【讨论】: