====== Anti-Gravity ====== (von Anthony Jakob) ==== Beschreibung ===== Bei der „Anti-Gravity“-Methode geht es darum, möglichst weit weg von den anderen Robotern zu bleiben. Dabei wird das Gravitationsgesetz verwendet, aber gerade umgekehrt: je näher unser Roboter von andern Robotern oder Wänden ist, desto stärker wird dieser von diesen abgestossen. ===== Implementation ===== Die Methode ist drei relativ einfachen Schritten implementierbar: ==== 1. Enemy-Tracking ==== Bevor die Kräfte ausgerechnet werden können, müssen zuerst die Positionen der Roboter bekannt sein. Dies kann mittels [[tracking]] erreicht werden. ==== 2. Kräfte Berechnen ==== Die Gravitationskraft ist proportional zur Umkehrung der zweiten Potenz der Distanz. Mit Hilfe der Position der Gegner (Punkt 1 – Enemy Tracking) können nun die verschiedenen Distanzen berechnet und summiert werden, um den Betrag und die Richtung resultierende Kraft herauszufinden. Codebeispiel: double fx = 0; double fy = 0; for (EnemyRobot enemy : enemyTracker.getEnemies()) { double heading = enemy.getHeading(); double distance = enemy.getDistance(); fx = fx - Math.sin(heading) / (distance * distance); fy = fy - Math.cos(heading) / (distance * distance); } double angle = Math.atan2(fx, fy); ===== 3. Roboter bewegen ===== Um den Zeitgebrauch zu minimieren, muss bei der Bewegung darauf geachtet werden, dass unser Roboter nie mehr als 90° dreht. Im Code sieht das dann so aus: