Bukkit:如何获得玩家到圆圈边缘的距离?
Bukkit: How to get a Players distance to the edge of a circle?
如果我在选定的世界中有一个位置,并且在该位置周围有一个 "safe zone" 延伸 500 个方块(创建一个圆圈)(这意味着玩家可以在该位置的 500 个方块内并且是 "safe")。我怎样才能找到从玩家位置到最近的安全区域的距离?或者在这种情况下,那个圆的最近边缘是什么?
要计算玩家到给定安全区的距离,您只需计算他们到安全区中心的距离,然后减去半径。这是因为到圆的边缘的最短向量将垂直于边界,因此平行于通过圆心的半径。
给定安全区中心的 (x,y)
坐标 (x1,y1)
和玩家的坐标 (x2,y2)
,您可以计算到安全区中心的距离这样的区域:
double distance = Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));
要比较您离哪个安全区最近,您可以等待减去半径长度以防止浪费计算。
对安全区列表进行排序可能如下所示:
public double distanceToNearestSafeZone(Player player, List<SafeZone> safeZones) {
double distance;
double minimumDistance = Double.POSITIVE_INFINITY;
for(SafeZone safeZone:safeZones) {
distance = Math.sqrt(Math.pow(player.x-safeZone.x,2) + Math.pow(player.y-safeZone.y,2));
if(minimumDistance > distance) {
minimumDistance = distance;
}
}
return minimumDistance - SafeZone.radius;
}
在此示例中,玩家对象有两个 public double
字段 x
和 y
保存玩家位置。 SafeZone
对象具有相似的字段。 SafeZone
也有一个 public static double radius
字段。
希望对您有所帮助!
如果我在选定的世界中有一个位置,并且在该位置周围有一个 "safe zone" 延伸 500 个方块(创建一个圆圈)(这意味着玩家可以在该位置的 500 个方块内并且是 "safe")。我怎样才能找到从玩家位置到最近的安全区域的距离?或者在这种情况下,那个圆的最近边缘是什么?
要计算玩家到给定安全区的距离,您只需计算他们到安全区中心的距离,然后减去半径。这是因为到圆的边缘的最短向量将垂直于边界,因此平行于通过圆心的半径。
给定安全区中心的 (x,y)
坐标 (x1,y1)
和玩家的坐标 (x2,y2)
,您可以计算到安全区中心的距离这样的区域:
double distance = Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));
要比较您离哪个安全区最近,您可以等待减去半径长度以防止浪费计算。
对安全区列表进行排序可能如下所示:
public double distanceToNearestSafeZone(Player player, List<SafeZone> safeZones) {
double distance;
double minimumDistance = Double.POSITIVE_INFINITY;
for(SafeZone safeZone:safeZones) {
distance = Math.sqrt(Math.pow(player.x-safeZone.x,2) + Math.pow(player.y-safeZone.y,2));
if(minimumDistance > distance) {
minimumDistance = distance;
}
}
return minimumDistance - SafeZone.radius;
}
在此示例中,玩家对象有两个 public double
字段 x
和 y
保存玩家位置。 SafeZone
对象具有相似的字段。 SafeZone
也有一个 public static double radius
字段。
希望对您有所帮助!