/*
* Datei: ZahnradDynamikEineDrehung.java
* Autor(en): Lukas K�nig
* Java-Version: 6.0
* Erstellt: 25.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 ZahnradDynamikEineDrehung implements Dynamik {
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am linken
* Zahnrad war.
*/
private long anzahlLinksAnf = 1;
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am rechten
* Zahnrad war.
*/
private long anzahlRechtsAnf = 1;
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am linken
* Zahnrad war.
*/
private long anzahlLinksEnd = 1;
/**
* Die Anzahl der Messungen, bei denen ein Roboter n�her am rechten
* Zahnrad war.
*/
private long anzahlRechtsEnd = 1;
// /**
// * String, der die Sensorwerte speichert.
// */
// private String sens = "";
/**
* 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) {
// if (simZyk == 0) {
// umg.getAkteure().get(0).setPos(300, 70, false);
// umg.getAkteure().get(0).setBlck(180);
// }
//
// for (int i = 0; i < 7; i++) {
// sens += umg.getAkteure().get(0).getSensorWert(i) + ";";
// }
// sens += "\n";
//
// if (simZyk % 100 == 0) {
// SonstMeth.speichereTextDatei(
// "graphen",
// "sensoren.txt",
// sens,
// umg.getPars());
// }
if (simZyk <= 100) {
umg.dreheWand(47, 10);
umg.dreheWand(221, 10);
} else {
umg.dreheWand(
47,
umg.getDynDrehWinkel()[47] * 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;
final int umschCons = 100000;
if (simZyk - umg.getPars().getUmschInSim() == umschCons) {
umg.resetRobs();
}
if (simZyk - umg.getPars().getUmschInSim() <= umschCons) {
umg.dreheWand(
221,
umg.getDynDrehWinkel()[221] * 180 / Math.PI - 0.75);
} else {
umg.dreheWand(
47,
umg.getDynDrehWinkel()[47] * 180 / Math.PI - 0.75);
}
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) {
if (simZyk - umg.getPars().getUmschInSim() <= umschCons) {
this.anzahlLinksAnf++;
} else {
this.anzahlLinksEnd++;
}
} else {
if (simZyk - umg.getPars().getUmschInSim() <= umschCons) {
this.anzahlRechtsAnf++;
} else {
this.anzahlRechtsEnd++;
}
}
}
}
if (simZyk % 100 == 0) {
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am linken Zahnrad (Anf.): " + this.anzahlLinksAnf,
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am rechten Zahnrad (Anf.): " + this.anzahlRechtsAnf,
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Prozent rechts (Anf.): "
+ (double) this.anzahlRechtsAnf * 100
/ (double) (this.anzahlLinksAnf + this.anzahlRechtsAnf),
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am linken Zahnrad (End.): " + this.anzahlLinksEnd,
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Naeher am rechten Zahnrad (End.): " + this.anzahlRechtsEnd,
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"Prozent rechts (End.): "
+ (double) this.anzahlRechtsEnd * 100
/ (double) (this.anzahlLinksEnd + this.anzahlRechtsEnd),
umg.getPars());
SonstMeth.log(
SonstMeth.LOG_INFO,
"\n-----------------\n",
umg.getPars(),
"plain",
null);
}
}
}