如果我在所选的世界中有一个位置,并且在该位置周围有一个说“安全区域”的区域,表示延伸500个区块(创建一个圆圈)(这意味着玩家可以在该区域的500个区块内并且是“安全的” )。我怎样才能找到从玩家位置到最近安全区域的距离?或者在这种情况下,该圈子的最近边缘是什么?Bukkit:如何让玩家距离到一个圆的边缘?
0
A
回答
4
要查找玩家与给定安全区域的距离,您只需找到距离安全区域中心的距离,然后减去半径即可。这是因为到圆的边缘的最短向量将垂直于边界,因此平行于通过圆的中心的半径。
给定一个安全区,(x1,y1)
和玩家,(x2,y2)
的中心坐标的(x,y)
坐标,可以计算到安全区像这样的中心的距离:
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
字段。
我希望这有助于!
相关问题
- 1. 获取距离边缘的距离3
- 2. 如何更改Android对话框边距(到屏幕边缘的距离)?
- 3. 如何圆一个GeoDjango内置距离
- 4. IOS 7 UINavigationBar的距离的UIBarButtonItem边缘
- 5. Threejs,Keydown应该移动我的玩家一定的距离,但距离增加
- 6. 如何使边缘变圆
- 7. Bukkit检查玩家的库存
- 8. 如何识别这个圆形边缘?
- 9. 画一个光滑边缘的圆
- 10. 如何让玩家正确移动到另一个领域?
- 11. NPC不会停在玩家的某个距离
- 12. 如何让无限边缘提升到有限边缘?
- 13. 将玩家对象围绕玩家对象移动一个光滑的圆圈
- 14. 如何使iframe填充由距边缘的距离定义的区域?
- 15. 如何确定一个多边形的顶点,该多边形的外边缘距离Google地图上javascript或线条的某个给定距离?
- 16. 从已知点到网络边缘的距离
- 17. 找到穿过边缘的最大距离 - Matlab
- 18. 搅拌器如何圆脸的边缘
- 19. 如何用Swift圆形UILabel的边缘
- 20. 如何让玩家锁定其半径内的一个敌人?
- 21. 让玩家双跳
- 22. 圆玩家无法在Firefox
- 23. 用于玩家不允许远距传送的Java bukkit配置文件
- 24. 如何获取有多少在线玩家在线上bukkit?
- 25. Bukkit:如何存储玩家和课程信息?
- 26. 如何从玩家库存配置中加载ID列表? [Bukkit]
- 27. 如何设置线边框和窗口边缘之间的距离?
- 28. 如何阻止玩家离开电网?
- 29. 每个玩家配置文件的Java Bukkit/Spigot
- 30. 如何让单边盒子阴影从边缘到边缘出现?
你为什么要困扰安全区的*边缘?只需计算从玩家位置到安全区域中心的距离即可。如果你仍然需要到边缘的距离,那么你可以减去半径。 – domsson