如何计算给定点在自定义扇区的圆的哪个扇区?

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 轴为中心,所以我按半扇区进行了更正。