Package fmg.fmg8.umgebung2D.dynWaende

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

/*
* 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 KreuzDynamik 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;

    /**
     * Drehwinkel des einen Kreuzes.
     */
    final double drehWinkel1 = 0.05;
   
    /**
     * Drehwinkel des anderen Kreuzes.
     */
    final double drehWinkel2 = 1.5;
   
    /**
     *
     */
    private double geschw = 2;
   
    /**
     * 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 (this.geschw <= 2) {
            this.geschw -= 0.01;
        }
       
//        umg.setDynDrehMittPkt(
//                221,
//                new Vektor2D(
//                        umg.getDynDrehMittPkte()[221].x - 1,
//                        umg.getDynDrehMittPkte()[221].y));
//
////        umg.verzerrWand(221, Math.abs(this.geschw) / 2, 1);
       
        umg.dreheWand(
                221,
                umg.getDynDrehWinkel()[221] * 180 / Math.PI - drehWinkel1);
        umg.dreheWand(
                47,
                umg.getDynDrehWinkel()[47] * 180 / Math.PI - drehWinkel2);
    }

    /**
     * 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 - drehWinkel1);
            umg.dreheWand(
                    47,
                    umg.getDynDrehWinkel()[47] * 180 / Math.PI - drehWinkel2);
        } else {
            umg.dreheWand(
                    221,
                    umg.getDynDrehWinkel()[221] * 180 / Math.PI - drehWinkel2);
            umg.dreheWand(
                    47,
                    umg.getDynDrehWinkel()[47] * 180 / Math.PI - drehWinkel1);
        }
       
        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.KreuzDynamik

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.