/// <summary>
        /// Erzeugt eine neue Beschreibung.
        /// </summary>
        /// <param name="fläche">Die tatsächliche Position des Elementes.</param>
        /// <param name="horizontaleVerschiebung">Die Verschiebung in horizontale Richtung.</param>
        /// <param name="vertikaleVerschiebung">Die Verschiebung in vertikale Richtung.</param>
        private ElementInBewegung( Fläche fläche, GenaueZahl horizontaleVerschiebung, GenaueZahl vertikaleVerschiebung )
        {
            // Alles merken
            HorizontaleVerschiebung = horizontaleVerschiebung;
            VertikaleVerschiebung = vertikaleVerschiebung;
            Fläche = fläche;

            // Breite und Höhe des Bewegungspfads ermitteln
            var breite = Fläche.Bereich.Breite + HorizontaleVerschiebung.Abs();
            var höhe = Fläche.Bereich.Höhe + VertikaleVerschiebung.Abs();

            // Ursprung bestimmen
            var links = Fläche.Bereich.KleinsteHorizontalePosition;
            var unten = Fläche.Bereich.KleinsteVertikalePosition;

            // Je nach Orientierung korrigieren
            if (HorizontaleVerschiebung < GenaueZahl.Null)
                links += HorizontaleVerschiebung;
            if (VertikaleVerschiebung < GenaueZahl.Null)
                unten += VertikaleVerschiebung;

            // Gesamtumfang ermitteln
            GesamterBereich = Bereich.Erzeugen( links, unten, breite, höhe );
        }
Beispiel #2
0
        /// <summary>
        /// Erzeugt eine neue Beschreibung.
        /// </summary>
        /// <param name="analyse">Die zugehörige Analyseinstanz.</param>
        /// <param name="element">Das zugehörige Hindernis.</param>
        public Hindernis( KollisionsAnalyse analyse, Fläche element )
        {
            // Merken
            m_analyse = analyse;
            Element = element;

            // Die Ausdehung des sich bewegenden Elementes ermitteln
            var bewegung = analyse.Bewegung;
            var ausgangsBereich = bewegung.Fläche.Bereich;

            // Die Ausdehung des Hindernisses ermitteln
            var elementBereich = element.Bereich;

            // Element im Planungsbereich positionieren - bei Bedarf wird alles in den positiven Quadranten gespiegelt, wir nehmen den Abstand zum Ursprung
            var xRelativ = bewegung.VonLinksNachRechts ? (elementBereich.KleinsteHorizontalePosition - ausgangsBereich.GrößteHorizontalePosition) : (ausgangsBereich.KleinsteHorizontalePosition - elementBereich.GrößteHorizontalePosition);
            var yRelativ = bewegung.VonUntenNachOben ? (elementBereich.KleinsteVertikalePosition - ausgangsBereich.GrößteVertikalePosition) : (ausgangsBereich.KleinsteVertikalePosition - elementBereich.GrößteVertikalePosition);

            // Gesamte Ausdehnung ermitteln, so wie sie in der Planung benötigt wird - zusammengesetzt aus den Ausdehnungen beider beteiligter Elemente
            var breite = elementBereich.Breite + ausgangsBereich.Breite;
            var höhe = elementBereich.Höhe + ausgangsBereich.Höhe;

            // Anfänglichen Bereich berechnen - dieser wird mit jedem Schritt angepasst
            Bereich = Bereich.Erzeugen( xRelativ, yRelativ, breite, höhe );
        }
 /// <summary>
 /// Erzeugt eine neue Beschreibung.
 /// </summary>
 /// <param name="fläche">Die tatsächliche Position des Elementes.</param>
 /// <param name="horizontaleVerschiebung">Die Verschiebung in horizontale Richtung.</param>
 /// <param name="vertikaleVerschiebung">Die Verschiebung in vertikale Richtung.</param>
 /// <returns>Die gewünschte Beschreibung der Bewegung.</returns>
 public static ElementInBewegung Erzeugen( Fläche fläche, GenaueZahl horizontaleVerschiebung, GenaueZahl vertikaleVerschiebung )
 {
     // Forward
     return new ElementInBewegung( fläche, horizontaleVerschiebung, vertikaleVerschiebung );
 }