/*
* Datei: ZahnradDynamik.java
* Autor(en): Lukas K�nig
* Java-Version: 6.0
* Erstellt: 24.08.2009
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.umgebung2D.dynWaende;
import fmg.fmg8.sonstiges.SonstMeth;
import fmg.fmg8.statistik.Parametersatz;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.Umgebung;
import fmg.fmg8.umgebung2D.Vektor2D;
/**
* @author Lukas K�nig
*/
public class ZahnradDynamik implements Dynamik {
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am linken
* Zahnrad war.
*/
private long anzahlLinks = 0;
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am rechten
* Zahnrad war.
*/
private long anzahlRechts = 0;
/**
* Die Verschiebe-Methode, die das linke obere Zahnrad in der
* Zahnradumgebung dreht. Das rechte untere Zahnrad wird nur auf
* einen konstanten Winkel gedreht.
*
* @param umg Die Umgebung, in der die Ver�nderungen stattfinden
* sollen.
* @param simZyk Der aktuelle Simulationszyklus.
* @param params Die Parameter.
*/
@Override
public void verschVorUm(
final Umgebung umg,
final long simZyk,
final Parametersatz params) {
umg.dreheWand(
47,
umg.getDynDrehWinkel()[47] * 180 / Math.PI + 0.75);
umg.dreheWand(
221,
umg.getDynDrehWinkel()[221] * 180 / Math.PI - 0.75);
}
/**
* F�hrt die Verschiebung, Verzerrung, Rotation... von W�nden in der
* �bergebenen Umgebung durch. NACH der Umschaltung in Simulationsmodus.
* Es wird einfach die Methode VOR Umschaltung aufgerufen.
*
* @param umg Die Umgebung, in der die Ver�nderungen stattfinden sollen.
* @param simZyk Der aktuelle Simulationszyklus.
* @param params Die Parameter.
*/
@Override
public void verschNachUm(
final Umgebung umg,
final long simZyk,
final Parametersatz params) {
Vektor2D mitte1, mitte2;
double abstand1, abstand2;
int bef0;
String befehl0;
this.verschVorUm(umg, simZyk, params);
for (Roboter rob : umg.getAkteure()) {
mitte1 = rob.getUmg().getDynWaende()[47].mittelpunkt();
mitte2 = rob.getUmg().getDynWaende()[221].mittelpunkt();
abstand1 = rob.getPosition().distanz(mitte1);
abstand2 = rob.getPosition().distanz(mitte2);
bef0 = ((Integer) rob.getBefehle().get(0)).intValue();
befehl0 = fmg.fmg8.umgebung2D.Konstanten.BEF[bef0].toUpperCase();
if (befehl0.equals("MOV")) {
if (abstand1 <= abstand2) {
this.anzahlLinks++;
} else {
this.anzahlRechts++;
}
}
}
if (simZyk % 100 == 0) {
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am linken Zahnrad: " + this.anzahlLinks,
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am rechten Zahnrad: " + this.anzahlRechts,
umg.getPars());
}
}
}