Package fmg.fmg8.umgebung2D.dynWaende

Source Code of fmg.fmg8.umgebung2D.dynWaende.ZahnradDynamikEineDrehung

/*
* 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);
        }
    }
}
TOP

Related Classes of fmg.fmg8.umgebung2D.dynWaende.ZahnradDynamikEineDrehung

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.