Cómo calcular en qué sector de un círculo se encuentra un punto determinado con sectores personalizados?
Estoy haciendo un juego TD en el que puedo colocar una ametralladora y, dependiendo del sector de un círculo circundante en el que esté el mouse, el sprite y el camino de la bala cambiarán.
Mi dificultad es crear un algoritmo que me diga en qué sector está mi mouse.
Mi círculo tiene 16 sectores, y un radio de 300. Cada arco tiene una longitud de 117.81. A partir de (300,300), tengo una lista exacta de todas las coordenadas de las líneas, por lo que actualmente puedo dibujar el sector así:
Estoy usando un oyente del mouse para detectar las coordenadas del mouse cada vez que se mueve, por lo que tengo un “currentPoint” para verificar en qué sector se encuentra.
Basándose en esta información, ¿alguien puede pensar en una manera fácil y eficiente de devolver simplemente un número entero en qué sector se encuentra el mouse actualmente?
Preferiblemente de manera eficiente.
Esto es lo que estoy considerando sobre cómo se vería:
Y miré esta publicación en StackOverflow que parecía un problema similar: https://stackoverflow.com/questions/13652518/efficiently-find-points-inside-a-circle-sector
Y lo implementé con Java, pero parece que no se traduce sin tener vectores y estoy un poco confundido acerca de las matemáticas para hacer que funcione.
He estado tratando de resolver esto durante un tiempo, agradecería cualquier ayuda con cualquier tipo de implementación (no importa agregar cálculos trigonométricos), junto con cualquier ayuda para entender el problema.
¡Gracias!
davy.ai
Solución
Para determinar en qué sector se encuentra actualmente el ratón, podemos usar trigonometría para calcular el ángulo entre el punto actual y el centro del círculo. Luego podemos dividir el ángulo por el tamaño de cada sector para determinar en qué sector cae.
Aquí está el algoritmo para implementar esto:
distancia = sqrt((x2 - x1)^2 + (y2 - y1)^2)
.ángulo = atan2(y - centerY, x - centerX)
.Aquí está el código Java para implementar este algoritmo:
Para utilizar este método, puedes llamarlo desde tu oyente de ratón cada vez que se mueve el ratón y pasar las coordenadas del ratón, el centro del círculo, el radio del círculo y el número de sectores. Devolverá el índice del sector en el que se encuentra actualmente el ratón, o -1 si está fuera del círculo.