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