如何计算给定点在自定义扇区的圆的哪个扇区?
How to calculate which sector of a circle a given point is with custom sectors?
所以我正在制作一个 TD 游戏,我可以在其中放置一把加特林机枪,并且根据鼠标所在的圆圈的哪个扇区,精灵和子弹路径会发生变化。
我的困难在于创建一个算法来告诉我我的鼠标在哪个扇区。
我的圆有16个扇区,半径为300,每条弧长为117.81。
从 (300,300) 延伸,我有所有线坐标的精确列表,所以我现在可以像这样绘制扇区:
Circle
我正在使用鼠标侦听器在鼠标移动时检测鼠标的坐标,因此我有一个“currentPoint”来检查它在哪个扇区内。
基于这些信息,谁能想出一个简单的方法来简单地 return 鼠标当前所在扇区的整数?最好有点效率。
这些是我正在考虑的两种方式:
Two_Ideas
我确实看过这个 Whosebug,它似乎是一个类似的问题:Efficiently find points inside a circle sector
我用 Java 实现了它,但它似乎没有向量就无法翻译,而且我对数学有点太困惑了,无法让它工作。
一段时间以来,我一直在努力解决这个问题,我很乐意提供任何类型的实施帮助(不介意添加 Trig 计算),以及理解问题的任何帮助。
谢谢!!
要获取扇区,您需要获取相对于点中心的角度。
伪代码(我不确定 Java 中的数学函数和舍入方式):
double angle = math.atan2(mouse.y-center.y, mouse.x-center.x);
angle = angle - math.pi / 16.0;
while (angle < 0) {
angle = angle + 2*math.pi;
}
sector = math.floor(angle * 8.0 / math.pi);
因为你的第一个扇区是以 OX 轴为中心,所以我按半扇区进行了更正。
所以我正在制作一个 TD 游戏,我可以在其中放置一把加特林机枪,并且根据鼠标所在的圆圈的哪个扇区,精灵和子弹路径会发生变化。
我的困难在于创建一个算法来告诉我我的鼠标在哪个扇区。
我的圆有16个扇区,半径为300,每条弧长为117.81。 从 (300,300) 延伸,我有所有线坐标的精确列表,所以我现在可以像这样绘制扇区: Circle
我正在使用鼠标侦听器在鼠标移动时检测鼠标的坐标,因此我有一个“currentPoint”来检查它在哪个扇区内。 基于这些信息,谁能想出一个简单的方法来简单地 return 鼠标当前所在扇区的整数?最好有点效率。
这些是我正在考虑的两种方式: Two_Ideas
我确实看过这个 Whosebug,它似乎是一个类似的问题:Efficiently find points inside a circle sector 我用 Java 实现了它,但它似乎没有向量就无法翻译,而且我对数学有点太困惑了,无法让它工作。
一段时间以来,我一直在努力解决这个问题,我很乐意提供任何类型的实施帮助(不介意添加 Trig 计算),以及理解问题的任何帮助。 谢谢!!
要获取扇区,您需要获取相对于点中心的角度。
伪代码(我不确定 Java 中的数学函数和舍入方式):
double angle = math.atan2(mouse.y-center.y, mouse.x-center.x);
angle = angle - math.pi / 16.0;
while (angle < 0) {
angle = angle + 2*math.pi;
}
sector = math.floor(angle * 8.0 / math.pi);
因为你的第一个扇区是以 OX 轴为中心,所以我按半扇区进行了更正。