怎么获取两点,两个location中间的全部坐标,想弄个区域随机生成怪物
2点A(x1,y1,z1) B(x2,y2,z2) 之间(矩形区域) 的点C(xc,yc,zc)
必有 xc ∈ [x1,x2] yc ∈ [y1,y2] zc ∈ [z1,z2]
所以你要随机可以根据 2点的坐标形成的区间来随机,不用获取所有点
必有 xc ∈ [x1,x2] yc ∈ [y1,y2] zc ∈ [z1,z2]
所以你要随机可以根据 2点的坐标形成的区间来随机,不用获取所有点
new Location(loc1.getWorld(), loc1.getX()+random.nextDouble(Math.abs(loc2.getX()-loc1.getX())), loc1.getY()+random.nextDouble(Math.abs(loc2.getY()-loc1.getY())), loc1.getZ()+random.nextDouble(Math.abs(loc2.getZ()-loc1.getZ())))
- /**
- * 获取两个位置之间所有坐标的方法
- *
- * @param loc1 第一个位置
- * @param loc2 第二个位置
- * @return 包含所有坐标的列表
- */
- public static List<Location> getLocationsBetween(Location loc1, Location loc2) {
- // 获取位置所在的世界对象
- World world = loc1.getWorld();
- // 存储所有坐标的列表
- List<Location> locations = new ArrayList<>();
- // 计算坐标轴的最小值和最大值
- int xMin = Math.min(loc1.getBlockX(), loc2.getBlockX());
- int xMax = Math.max(loc1.getBlockX(), loc2.getBlockX());
- int yMin = Math.min(loc1.getBlockY(), loc2.getBlockY());
- int yMax = Math.max(loc1.getBlockY(), loc2.getBlockY());
- int zMin = Math.min(loc1.getBlockZ(), loc2.getBlockZ());
- int zMax = Math.max(loc1.getBlockZ(), loc2.getBlockZ());
- // 生成所有坐标
- for (int x = xMin; x <= xMax; x++) {
- for (int y = yMin; y <= yMax; y++) {
- for (int z = zMin; z <= zMax; z++) {
- // 创建新的 Location 对象,并将其添加到列表中
- Location location = new Location(world, x, y, z);
- locations.add(location);
- }
- }
- }
- // 返回所有坐标的列表
- return locations;
- }
首先从 loc1 中获取所在的世界对象,然后创建一个空的列表用于存储所有坐标。
通过比较 loc1 和 loc2 在每个坐标轴上的值,计算出 x、y、z 坐标轴上的最小值和最大值。确保坐标生成范围正确。
通过嵌套的三层循环生成所有坐标,这些坐标包括了所有可能的 x、y、z 坐标值组合,将这些坐标添加到列表中返回。
需要注意的是,这个方法坐标获取间隔只为 1。如果需要生成精确到小数点的坐标,可以修改循环部分的实现。
另外使用时请注意性能问题。
两个点中间的坐标有无穷多个,你想要哪些?整数坐标吗?