Exemple #1
0
        public Kante(Knoten startknotenEintragen, Knoten endknotenEintragen, double übertragungsdauerEintragen)
        {
            this.SetStartKnoten(startknotenEintragen);
            this.SetEndKnoten(endknotenEintragen);

            this.SetÜbertragungsDauer(übertragungsdauerEintragen);
        }
        // Nachbarn ermitteln


        public Knoten[] GetNachbarn(Knoten knotenSuchtNachbarn, int anzahlZellenxAchse, int anzahlZellenyAchse)
        {
            Knoten[] nachbarn = new Knoten[4];
            // 0 ist rechts, 1 ist oben, 2 ist links, 3 ist unten

            int rechterNachbar = knotenSuchtNachbarn.GetKnotennummer() + 1;
            int obererNachbar  = knotenSuchtNachbarn.GetKnotennummer() - anzahlZellenxAchse;
            int linkerNachbar  = knotenSuchtNachbarn.GetKnotennummer() - 1;
            int untererNachbar = knotenSuchtNachbarn.GetKnotennummer() + anzahlZellenxAchse;



            if (knotenSuchtNachbarn.GetKnotennummer() % anzahlZellenxAchse != (anzahlZellenxAchse - 1))
            {
                nachbarn[0] = Knotenmenge[rechterNachbar];
            }
            else
            {
                nachbarn[0] = NegativKnoten;
            }
            if (knotenSuchtNachbarn.GetKnotennummer() >= anzahlZellenxAchse)
            {
                nachbarn[1] = Knotenmenge[obererNachbar];
            }
            else
            {
                nachbarn[1] = NegativKnoten;
            }

            if (knotenSuchtNachbarn.GetKnotennummer() % anzahlZellenxAchse != 0)
            {
                nachbarn[2] = Knotenmenge[linkerNachbar];
            }
            else
            {
                nachbarn[2] = NegativKnoten;
            }
            if (knotenSuchtNachbarn.GetKnotennummer() < anzahlZellenxAchse * (anzahlZellenyAchse - 1))
            {
                nachbarn[3] = Knotenmenge[untererNachbar];
            }
            else
            {
                nachbarn[3] = NegativKnoten;
            }
            return(nachbarn);
        }
        // Knotenkonstruktion


        private async Task <Knoten[]> Knotenkonstruieren(int anzahlKnotenxAchse, int anzahlKnotenyAchse)
        {
            return(await Task.Run(() =>
            {
                for (int zeile = 0; zeile < anzahlKnotenyAchse; zeile++)
                {
                    for (int knotennummer = (zeile) * anzahlKnotenxAchse; knotennummer < (zeile + 1) * anzahlKnotenxAchse; knotennummer++)
                    {
                        int xKoordinate = knotennummer - zeile * anzahlKnotenxAchse;
                        int yKoordinate = zeile;
                        double infektionszeit = KnopVerteilungsZahlenGeneratorInfektionszeit(_übertragungsrateAlpha, _standardabweichungÜbertragungsrate);

                        Knotenmenge[knotennummer] = new Knoten(knotennummer, xKoordinate, yKoordinate, infektionszeit);
                    }
                }
                return Knotenmenge;
            }));
        }
        // Infiziere Nachbarn


        public void InfiziereNachbarn(Knoten knoten)
        {
            int count = 0;

            for (int i = 0; i < 4; i++)
            {
                if (Kantenmenge[knoten.GetKnotennummer(), i].GetÜbertragungsDauer() != _geschlossen && Kantenmenge[knoten.GetKnotennummer(), i].GetEndknoten().GetZustand() == 0)
                {
                    Kantenmenge[knoten.GetKnotennummer(), i].GetEndknoten().SetbisherigeZeit(knoten.GetBisherigeZeit() + Kantenmenge[knoten.GetKnotennummer(), i].GetÜbertragungsDauer());

                    //Kantenmenge[knoten.GetKnotennummer(), i].GetEndknoten().ZustandVerändert() += KnotenZustandVerändert;
                    Kantenmenge[knoten.GetKnotennummer(), i].GetEndknoten().Infiziere();
                }
                else
                {
                    Kantenmenge[knoten.GetKnotennummer(), i].SetÜbertragungsDauer(_geschlossen);
                    count++;
                }
            }
            if (count == 4)
            {
                knoten.SetIstEndknoten(true);
            }
        }
        private void ButtonKonstruktion_Click(object sender, RoutedEventArgs e)
        {
            // anzahlZellenBreit = (int)sliderxAchse.Value;
            // anzahlZellenHoch = (int)slideryAchse.Value;
            int gesamtAnzahlKnoten = anzahlZellenBreit * anzahlZellenHoch;


            // Grundarrays Initialisieren
            Rectangle[,] felder = new Rectangle[ProgrammWPFGame._anzahly, ProgrammWPFGame._anzahlx];
            Knoten NegativKnoten = new Knoten(-1, -1, -1, -1.0);

            NegativKnoten.SetInfektionszeit(-1.0);
            Knoten[] Knotenmenge = new Knoten[gesamtAnzahlKnoten];



            // Krankheitsausbreitung
            Knotenmenge = Programm.KrankheitsAusbreitung();



            // Konstruktion der visuellen Ausgabe
            for (int knoten = 0; knoten < gesamtAnzahlKnoten; knoten++)
            {
                SolidColorBrush myBrush  = new SolidColorBrush();
                var             Rechteck = new Rectangle
                {
                    Width  = zeichenfläche.ActualWidth / anzahlZellenBreit - 0.1,
                    Height = zeichenfläche.ActualHeight / anzahlZellenHoch - 0.1
                };
                if (CheckBox_Endknoten.IsChecked.HasValue && CheckBox_Endknoten.IsChecked.Value)
                {
                    if (Knotenmenge[knoten].GetBisherigeZeit() != 0 && Knotenmenge[knoten].GetIstEndknoten())
                    {
                        myBrush.Color = Color.FromRgb(190, ByteKonstruktion(Knotenmenge[knoten].GetBisherigeZeit(), MaximumBisherigeZeit(Knotenmenge)), 0);
                        Rechteck.Fill = myBrush;
                    }
                    else if (Knotenmenge[knoten].GetBisherigeZeit() != 0 && Knotenmenge[knoten].GetIstEndknoten() == false)
                    {
                        myBrush.Color = Color.FromRgb(100, 100, 100);
                        Rechteck.Fill = myBrush;
                    }
                    else
                    {
                        myBrush.Color = Color.FromRgb(20, 17, 29);
                        Rechteck.Fill = myBrush;
                    }
                }
                else
                {
                    if (Knotenmenge[knoten].GetBisherigeZeit() != 0)
                    {
                        myBrush.Color = Color.FromRgb(190, ByteKonstruktion(Knotenmenge[knoten].GetBisherigeZeit(), MaximumBisherigeZeit(Knotenmenge)), 0);
                        Rechteck.Fill = myBrush;
                    }
                    else
                    {
                        myBrush.Color = Color.FromRgb(20, 17, 29);
                        Rechteck.Fill = myBrush;
                    }
                }


                zeichenfläche.Children.Add(Rechteck);
                Canvas.SetLeft(Rechteck, Knotenmenge[knoten].GetXKoordinate() * zeichenfläche.ActualWidth / anzahlZellenBreit);
                Canvas.SetTop(Rechteck, Knotenmenge[knoten].GetYKoordinate() * zeichenfläche.ActualHeight / anzahlZellenHoch);
                felder[Knotenmenge[knoten].GetYKoordinate(), Knotenmenge[knoten].GetXKoordinate()] = Rechteck;
            }



            felder[anzahlZellenBreit / 2, anzahlZellenHoch / 2].Fill = Brushes.White;
        }
Exemple #6
0
 public void SetStartKnoten(Knoten startknotenEintragen)
 {
     this._startKnoten = startknotenEintragen;
 }
Exemple #7
0
 public void SetEndKnoten(Knoten endknotenEintragen)
 {
     this._endKnoten = endknotenEintragen;
 }