gpt4 book ai didi

java - Bukkit:如何获得玩家到圆边缘的距离?

转载 作者:行者123 更新时间:2023-12-01 17:55:48 27 4
gpt4 key购买 nike

如果我在选定的世界中选择了一个位置,并且在该位置周围有一个“安全区”,该区域延伸 500 个街区(创建一个圆圈)(这意味着玩家可以在该位置的 500 个街区内并且是“安全的”) ”)。如何找到从玩家位置到最近安全区域的距离?或者在这种情况下,该圆的最近边缘是什么?

最佳答案

要找到玩家到给定安全区的距离,您只需找到他们到安全区中心的距离,然后减去半径。这是因为到圆边缘的最短 vector 将垂直于边界,因此平行于穿过圆心的半径。

给定安全区中心的 (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 字段 xy 保存玩家位置。 SafeZone 对象具有类似的字段。 SafeZone 还有一个 public static double radius 字段。

希望这会有所帮助!

关于java - Bukkit:如何获得玩家到圆边缘的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com