/// <summary>
            /// Erzeugt eine neue Beschreibung.
            /// </summary>
            /// <param name="element">Das zugehörige Element.</param>
            /// <param name="spielZeit">Die bisher verstrichene Spielzeit.</param>
            /// <param name="sekunden">Die Anzahl der Sekunden seit der letzten Berechnung.</param>
            public BewegungsInformation( GrundElement element, TimeSpan spielZeit, decimal sekunden )
            {
                // Nicht nutzbar
                if (element.IstDeaktiviert)
                    return;

                // Merken
                m_verbleibendeSchritte = (int) Math.Round( 1000m * sekunden );
                Element = element;

                // Geschwindigkeit auslesen
                var geschwindigkeit = element.GeschwindigkeitsRegel.AktuelleGeschwindigkeitBerechnen( spielZeit );
                if (geschwindigkeit == null)
                    return;

                // Anfangsposition auslesen
                var aktuellePosition = element.Position;

                // Endposition berechnen
                var xEnde = (aktuellePosition.HorizontalePosition + geschwindigkeit.HorizontaleGeschwindigkeit * sekunden).ZwischenNullUndEins();
                var yEnde = (aktuellePosition.VertikalePosition + geschwindigkeit.VertikaleGeschwindigkeit * sekunden).ZwischenNullUndEins();

                // Ziel und Geschwindigkeit merken
                Geschwindigkeit = geschwindigkeit;

                // Schrittweiten berechnen
                m_xSchritt = (xEnde - aktuellePosition.HorizontalePosition) / m_verbleibendeSchritte;
                m_ySchritt = (yEnde - aktuellePosition.VertikalePosition) / m_verbleibendeSchritte;

                // Es witd sich nichts verändern
                if (m_xSchritt == GenaueZahl.Null)
                    if (m_ySchritt == GenaueZahl.Null)
                        return;

                // Dem Element mitteilen, dass es nun losgeht
                element.Bewegen( aktuellePosition );
            }
        /// <summary>
        /// Entfernt eine einzelne Geschwindigkeitsregel.
        /// </summary>
        /// <param name="geschwindigkeit">Die zu entfernende Geschwindigkeitsregel.</param>
        public void GeschwindigkeitEntfernen( Geschwindigkeit geschwindigkeit )
        {
            // Muss parallel ausführbar sein
            for (; ; )
            {
                // Alte Liste
                var liste = m_liste;

                // Neue Liste ohne den angegebenen Eintrag
                var neu = new List<Geschwindigkeit>( liste.Where( bekannteGeschwindigkeit => !ReferenceEquals( bekannteGeschwindigkeit, geschwindigkeit ) ) );

                // Sicher ersetzen
                if (neu.Count < liste.Count)
            #pragma warning disable 0420
                    if (ReferenceEquals( Interlocked.CompareExchange( ref m_liste, neu, liste ), liste ))
            #pragma warning restore 0420
                        break;
            }
        }
        /// <summary>
        /// Ergänzt eine neue Geschwindigkeit.
        /// </summary>
        /// <param name="geschwindigkeit">Die neue Geschwindigkeit.</param>
        public void GeschwindigkeitErgänzen( Geschwindigkeit geschwindigkeit )
        {
            // Muss parallel ausführbar sein
            for (; ; )
            {
                // Alte Liste
                var liste = m_liste;

                // Neue Liste
                var neu = new List<Geschwindigkeit>( liste ) { geschwindigkeit };

                // Sicher ersetzen
            #pragma warning disable 0420
                if (ReferenceEquals( Interlocked.CompareExchange( ref m_liste, neu, liste ), liste ))
            #pragma warning restore 0420
                    break;
            }
        }