Package fmg.fmg8.umgebung2D.dynWaende

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

/*
* Datei:            GrundDynamik.java
* Autor(en):        Lukas K�nig
* Java-Version:     6.0
* Erstellt:         20.05.2009
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/

package fmg.fmg8.umgebung2D.dynWaende;

import java.util.LinkedList;
import java.util.Random;

import fmg.fmg8.statistik.Parametersatz;
import fmg.fmg8.umgebung2D.Umgebung;
import fmg.fmg8.umgebung2D.Vektor2D;

/**
* @author Lukas K�nig
*/
public class GrundDynamik implements Dynamik {
   
    /**
     * Standardkonstruktor.
     *
     * @param rand  Zufallsgenerator.
     */
    public GrundDynamik(final Random rand) {
        super();
        this.random = rand;
    }

    /**
     * Zufallsgenerator.
     */
    private Random random;
   
    /**
     * Die Nummern der dynamischen W�nde.
     */
    private LinkedList<Integer> waende;

    /**
     * Die Drehrichtungen der dynamischen W�nde.
     */
    private LinkedList<Boolean> drehen;

    /**
     * Die Verschiebungsrichtungen der dynamischen W�nde.
     */
    private LinkedList<Boolean> versch;

    /**
     * Die Verzerrungsrichtungen der dynamischen W�nde.
     */
    private LinkedList<Boolean> verzerr;

    /**
     * Drehwinkel.
     */
    private LinkedList<Double> winkel;
   
    /**
     * Verschiebung.
     */
    private LinkedList<Double> xRicht;
   
    /**
     * Verschiebung.
     */
    private LinkedList<Double> yRicht;
   
    /**
     * F�hrt die Verschiebung, Verzerrung, Rotation... von W�nden in der
     * �bergebenen Umgebung durch. VOR der Umschaltung in Simulationsmodus.
     *
     * @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.waende == null) {
            this.waende = new LinkedList<Integer>();
            this.drehen = new LinkedList<Boolean>();
            this.versch = new LinkedList<Boolean>();
            this.verzerr = new LinkedList<Boolean>();
            this.winkel = new LinkedList<Double>();
            this.xRicht = new LinkedList<Double>();
            this.yRicht = new LinkedList<Double>();
           
            for (int i = 0; i < umg.getDynWaende().length; i++) {
                if (umg.getDynWaende()[i] != null) {
                    this.waende.add(i);
                    this.drehen.add(true);
                    this.versch.add(true);
                    this.verzerr.add(true);
                    this.winkel.add(this.random.nextDouble() * 0.5);
                    this.xRicht.add(this.random.nextDouble() * 0.5);
                    this.yRicht.add(this.random.nextDouble() * 0.5);
                }
            }
        }

        for (int i = 0; i < this.waende.size(); i++) {
            if (this.drehen.get(i)) {
                if (null != umg.dreheWand(
                        this.waende.get(i),
                        umg.getDynDrehWinkel()[this.waende.get(i)]
                                               * 180 / Math.PI
                                               + this.winkel.get(i))) {
                    this.drehen.set(i, !this.drehen.get(i));
                    this.winkel.set(i, this.random.nextDouble() * 0.5);
                }
            } else {
                if (null != umg.dreheWand(
                        this.waende.get(i),
                        umg.getDynDrehWinkel()[this.waende.get(i)]
                                               * 180 / Math.PI
                                               - this.winkel.get(i))) {
                    this.drehen.set(i, !this.drehen.get(i));
                    this.winkel.set(i, this.random.nextDouble() * 0.5);
                }
            }
            if (this.versch.get(i)) {
                Vektor2D vSchiebg = umg.getDynVersch()[this.waende.get(i)];
                vSchiebg.add(new Vektor2D(
                        this.xRicht.get(i),
                        this.yRicht.get(i)));
               
                if (null != umg.verschWand(
                        this.waende.get(i),
                        vSchiebg)) {
                    this.versch.set(i, !this.versch.get(i));
                    this.xRicht.set(i, this.random.nextDouble() * 0.5);
                    this.yRicht.set(i, this.random.nextDouble() * 0.5);
                }
            } else {
                Vektor2D vSchiebg = umg.getDynVersch()[this.waende.get(i)];
                vSchiebg.add(new Vektor2D(
                        -this.xRicht.get(i),
                        -this.yRicht.get(i)));
               
                if (null != umg.verschWand(
                        this.waende.get(i),
                        vSchiebg)) {
                    this.versch.set(i, !this.versch.get(i));
                    this.xRicht.set(i, this.random.nextDouble() * 0.5);
                    this.yRicht.set(i, this.random.nextDouble() * 0.5);
                }
            }
//            if (this.verzerr.get(i)) {
//                Vektor2D verz = new Vektor2D(
//                        umg.getDynHorFaktor()[this.waende.get(i)],
//                        umg.getDynVertFaktor()[this.waende.get(i)]);
//                verz.div(1.01);
//               
//                if (umg.getDynHorFaktor()[this.waende.get(i)] < 0.05
//                        || !umg.verzerrWand(
//                                this.waende.get(i),
//                                verz.x,
//                                verz.y)) {
//                   this.verzerr.set(i, !this.verzerr.get(i));
//                }
//            } else {
//                Vektor2D verz = new Vektor2D(
//                        umg.getDynHorFaktor()[this.waende.get(i)],
//                        umg.getDynVertFaktor()[this.waende.get(i)]);
//                verz.mult(1.01);
//               
//                if (!umg.verzerrWand(
//                        this.waende.get(i),
//                        verz.x,
//                        verz.y)) {
//                    this.verzerr.set(i, !this.verzerr.get(i));
//                }
//            }
        }
    }

    /**
     * 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) {
        this.verschVorUm(umg, simZyk, params);
    }
}
TOP

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

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.