我在基于中心的地图上有无限量的积分。它们应排列成多边形,因此它们的角度为360 /点数(http://prntscr.com/8z2w3z)。我有一个中心点,一个长度和方向,所以应该可以找到这些点的坐标。当我正在使用Bukkit创建一个Minecraft插件时,添加位置的唯一方法是添加它们的坐标,所以我不能简单地给它们一个方向。这是我期望工作的代码,但没有:
float teamAngle = angle * teamNumber;
Location spawnPoint = mapCenter;
float relX = (float)Math.cos(Math.toRadians(teamAngle))*radius;
float relZ = (float)Math.sin(Math.toRadians(teamAngle))*radius;
spawnPoint.add(new Location(Bukkit.getWorld("world"), relX, 0, relZ, 0, 0));
teamAngle
对于每个点都是φ,因此对于4个点,它将是0,90,180和270 radius
只是一个基于地图大小/ 2 * 0.8的浮点数。它可能不是最好的变量名称有4分,我期待这样的事情(地图宽度100 =>半径40,中心在(0 | 0)):
答案 0 :(得分:1)
据我所知,你计算坐标的想法是正确的。我只能猜测你得到奇怪坐标的原因是因为你一遍又一遍地编辑同一个位置(虽然因为你只提供了部分代码片段,所以我不能保证这样做。)
第Location spawnPoint = mapCenter
行不会创建新位置,只会创建一个名为spawnPoint
的引用,指向mapCenter
。
位置的add
方法也不会返回新的Location
实例。由于应通过将x和y组件添加到中心位置来找到多边形的每个顶点,因此必须复制或克隆mapCenter
变量,以便不编辑/更改原始的地图中心。我假设您使用循环来创建/查找多边形的每个顶点位置,而不复制mapCenter
变量,这将发生:
第一次迭代:角度为0º,将40
添加到spawnPoint
的x坐标(这会将mapCenter
更改为0
并将spawnPoint
添加到0
的z坐标}。假设地图的中心最初为0,0,0,坐标现在为40,0,0(这仍然是正确的)。
第二次迭代:角度为90º,将spawnPoint
添加到40
的x坐标,将spawnPoint
添加到centerMap
的z坐标(再次更改mapCenter
},我们已经在最后一次迭代中编辑过了。现在mapCenter
的坐标是40,0,40,这是不正确的。我们应该将新组件添加到Location spawnPoint = mapCenter.clone()
的新副本中。
要解决此问题,请使用public static List<Location> getPolygonVertices(float radius, int edges, Location center) {
List<Location> vertices = new ArrayList<Location>();
float angleDelta = 360 / edges; // The change in angle measure we use each iteration
for (int i = 0; i < edges; i++) { // For each vertix we want to find
float angle = angleDelta * i; // Calculate the angle by multiplying the change (angleDelta) with the number of the edge
Location corner = center.clone(); // Clone the center of the map
corner.add(Math.cos(Math.toRadians(angle)) * radius, 0, Math.sin(Math.toRadians(angle)) * radius); // Add the x and z components to the copy
vertices.add(corner);
}
return vertices;
}
。示例代码:
List<Location> vertices = getPolygonVertices(40, 4, mapCenter);
您可以像这样使用此方法:
$image = "../images/accommodatie/".$row2['acco_id']."/";
$images = glob($image."*.jpg");
sort($images);
if (count($images) > 0) {
$img = $images[0];
$img = str_replace("../","", $img);
echo "<a href='acco.php'>
<div>
<div>
<img src='$img'>
</div>";
}
它将返回正确的位置([40 | 0],[0 | 40],[ - 40 | 0],[0 | -40])。