Hallo
Ich habe ein NxM grid auf welchem sich Vögel (chars) befinden. In der Mitte des Rasters liegt eine Kanone die nach Norden gerichtet ist.
So sieht das ganze aus.
'O' = Vogel
'X' = Kanone
Die Kanone bewegt sich im Uhrzeigersinn und kann immer nur 1 Vogel pro Schritt abschießen. Nachdem ein Vogel abgeschossen wurde, bewegt sich die Kanone einen Schritt nach rechts und visiert automatisch den nächsten Vogel an.
Die Reihenfolge für die ersten 9 Schüsse sieht so aus
Gesucht ist die Anzahl an vollen Umdrehungen die die Kanone durchführt um alle Vögel zu erschießen. Das ganze soll natürlich für jedes x-beliebige Grid genauso funktionieren.
Was ich gegeben habe ist das Feld (char[][]), eine Liste von Point Objekten für die Positionen der Vögel und ein Point Objekt für die Position der Kanone.
Das ganze soll nur mithilfe von standard java klassen und methoden gelöst werden.
Ich weiß jetzt leider nicht wie ich hier rangehen soll.
Mein erster Versuch sah ungefähr so aus:
Ich setze eine winkel Variable auf 90.
Ich loope über die Vögel Liste und sammle jeden Vogel dessen aufgespannter Winkel vom Ursprung == winkel ist. Von diesen Vögeln "lösche" ich dann den nächstgelegenen Vogel aus. Danach wird der Winkel um 1 verringert.
Den Winkel berechne ich mit arctan2 (-Pi bis Pi) .
Klappt das so? Theoretisch müsste es gehen, nur weiß ich nicht, ob die 1° Schrittweite für den Winkel der Kanone ausreicht, um die richtige Reihenfolge zu bewahren.
Hat jemand einen einfacheren Weg?
Ich habe ein NxM grid auf welchem sich Vögel (chars) befinden. In der Mitte des Rasters liegt eine Kanone die nach Norden gerichtet ist.
So sieht das ganze aus.
Code:
.O....OOOOO...O..
OO...OO.OOOOO..OO
OOO..O...O.OOOOO.
..O.....X...OOO..
..O.O.....O....OO
'O' = Vogel
'X' = Kanone
Die Kanone bewegt sich im Uhrzeigersinn und kann immer nur 1 Vogel pro Schritt abschießen. Nachdem ein Vogel abgeschossen wurde, bewegt sich die Kanone einen Schritt nach rechts und visiert automatisch den nächsten Vogel an.
Die Reihenfolge für die ersten 9 Schüsse sieht so aus
Code:
.O....OOO24...O..
OO...OO.13O67..9O
OO...O...5.8OOOO.
..O.....X...OOO..
..O.O.....O....OO
Gesucht ist die Anzahl an vollen Umdrehungen die die Kanone durchführt um alle Vögel zu erschießen. Das ganze soll natürlich für jedes x-beliebige Grid genauso funktionieren.
Was ich gegeben habe ist das Feld (char[][]), eine Liste von Point Objekten für die Positionen der Vögel und ein Point Objekt für die Position der Kanone.
Das ganze soll nur mithilfe von standard java klassen und methoden gelöst werden.
Ich weiß jetzt leider nicht wie ich hier rangehen soll.
Mein erster Versuch sah ungefähr so aus:
Ich setze eine winkel Variable auf 90.
Ich loope über die Vögel Liste und sammle jeden Vogel dessen aufgespannter Winkel vom Ursprung == winkel ist. Von diesen Vögeln "lösche" ich dann den nächstgelegenen Vogel aus. Danach wird der Winkel um 1 verringert.
Den Winkel berechne ich mit arctan2 (-Pi bis Pi) .
und überführe diesen dann ins 0-359° System.
Klappt das so? Theoretisch müsste es gehen, nur weiß ich nicht, ob die 1° Schrittweite für den Winkel der Kanone ausreicht, um die richtige Reihenfolge zu bewahren.
Hat jemand einen einfacheren Weg?