【发布时间】:2019-01-05 15:21:57
【问题描述】:
我正在尝试通过接近度将点列表排序到路径中,但我能想到的唯一方法是迭代它们并获取当前存储的项目与我的项目之间的绝对值距离m 迭代,如果新坐标与当前坐标之差的绝对值大于 0 但不大于 2,则将该点设为当前点(查找相邻坐标)。
但是,我有一个范围问题,我正在摸索这里该怎么做。我不是通过增加 x、y 或 z 值来对它们进行排序 - 现在,我正在使用半径 1 进行测试 - 所以更传统的排序方法在这里不起作用。
有人指点吗?
package pickquest.common;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.Location;
public class Path {
private HashMap<Integer, Location> pathSequence = new HashMap<>();
public HashMap<Integer, Location> getPathSequence() {
return pathSequence;
}
public void setPathSequence(HashMap<Integer, Location> pathSequence) {
this.pathSequence = pathSequence;
}
public void setsequencePath(Location origin, ArrayList<Location> points, Location destination) {
sequencePath(origin, points, destination);
}
private void sequencePath(Location origin, ArrayList<Location> points, Location destination) {
Location current = origin;
ArrayList<Location> processedPoints = new ArrayList<>();
processedPoints.addAll(points);
while (!(processedPoints.isEmpty())) {
Integer index = 0;
for (int i = 0; i < points.size(); i++) {
if ((Math.abs(current.getX() - processedPoints.get(i).getX()) > 0) && (Math.abs(current.getX() - processedPoints.get(i).getX()) <= 1.9)) {
if (!(pathSequence.containsValue(processedPoints.get(i)))) {
getPathSequence().put(index, processedPoints.get(i));
processedPoints.remove(i);
break;
}
} else if ((Math.abs(current.getY() - processedPoints.get(i).getY()) > 0) && (Math.abs(current.getY() - processedPoints.get(i).getY()) <= 1.9)) {
if (!(pathSequence.containsValue(processedPoints.get(i)))) {
getPathSequence().put(index, processedPoints.get(i));
processedPoints.remove(i);
break;
}
} else if ((Math.abs(current.getY() - processedPoints.get(i).getY()) > 0) && (Math.abs(current.getY() - processedPoints.get(i).getY()) <= 1.9)) {
if (!(pathSequence.containsValue(processedPoints.get(i)))) {
getPathSequence().put(index, processedPoints.get(i));
processedPoints.remove(i);
break;
}
}
processedPoints.remove(i);
index++;
}
}
for (int i = 0; i < pathSequence.size(); i++) {
System.out.println(i + ": " + pathSequence.get(i));
}
}
}
【问题讨论】:
-
我相信一种常见的方法是使用绝对距离.. (√ (distX² + distY² + distZ²) 其中 distXYZ 是您当前位置和每个轴上下一个位置之间的距离。问这个在 Math.SE 上可能是一个好主意,因为这样的问题经常发生(例如“旅行推销员”,但这是针对二维坐标系统的)。
标签: java coordinates minecraft bukkit