Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Nur random Zahlen ausgeben die durch 4 teilbar sind (https://www.delphipraxis.net/194019-nur-random-zahlen-ausgeben-die-durch-4-teilbar-sind.html)

Enddrew 8. Okt 2017 16:28

Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Hallo Leute,

Mein Problem ist wie folgt. Ich will das Nagel-Schreckenberg-Modell (ein Zellulärautomat zur Darstellung von Staus) programmieren. Dazu brauche ich Vierecke die in 4 Pixel großen Zellen liegen (die Vierecke male ich mithilfe von "panel1.Canvas.Rectangle(x1,y1,x2,y2)") . Mein Problem ist nun, dass ich diesen Vierecken random Koordinaten zuweisen will. Diese Koordinaten dürfen allerdings nur alle vier Pixel sein, da sonst ein Viereck zwischen 2 Zellen liegen würde. Somit brauche ich random Zahlen die nur durch vier teilbar sind, aber ich weiß nicht wie ich das anstellen soll:|.

Ein weiteres Problem wäre noch das ich nicht 2 Vierecke auf der selben Position haben möchte. Falls mir jemand dabei auch noch eine Idee geben könnte wäre ich sehr dankbar.

Ich hoffe ich konnte euch mein Problem halbwegs gut erklären :lol:.
Danke schon mal im vorraus für die Antworten.

mjustin 8. Okt 2017 16:33

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Eine "Random"-Zahl erzeugen, dann mit vier multiplizieren?

... den mathematischen Beweis dafür, das man so nur durch vier teilbare Zahlen erhält, muss ich allerdings schuldig bleiben.
Nennen wir es - frei nach Horst Evers - "gefühltes Wissen" ;)

Enddrew 8. Okt 2017 16:36

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Das klingt schon mal nach einer guten Idee Dankeschön :) Ich werde es mal ausprobieren.

gammatester 8. Okt 2017 16:37

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Zu 1. Schreib eine Funktion myrand() die ungefähr so aussueht,
wobei (..) den Bereich definieren, multiplizieren mit 4 verletzt ev. den Bereich, also lieber gleich an der Basis ansetzen.
Delphi-Quellcode:
funtion myrand(..): integer;
begin
  repeat
    result := random(...);
  until result mod 4 = 0;
end.
zu 2. Was bedeutet "2 Vierecke auf der selben Position"?

Enddrew 8. Okt 2017 16:44

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
zu 2.) In diesem Modell stellen die Vierecke die Autos dar, die auch verschiedene Geschwindigkeiten haben. Daher wäre es unpraktisch, wenn ich 2 Autos auf der selben Position habe, da es ja auch in echt nicht möglich wäre. Dafür bräuchte ich eine Abfrage, dass diese random erstellten Autos nicht auf der selben Position auftauchen.

gammatester 8. Okt 2017 16:57

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Immer noch nicht klar. Willst Du, daß sich die Vierecke nicht überschneiden (dafür gibt's irgendwo sicher eine Funktion intersect, zB TRect.Intersect) oder daß die Eckpunkte nicht identisch sind?

Enddrew 8. Okt 2017 17:04

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich will das die Eckpunkte nicht identisch sind.

gammatester 8. Okt 2017 17:08

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Das sieht ja ein-dimensional aus mit jedem 'Auto' ein 4x4 Quadrat, dann braucht Du doch zu testen, ob die linken unteren Ecken schon belegt sind.

mensch72 8. Okt 2017 17:10

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
=> vergesst doch bitte bei diesem Porblem den Versuch der "grafischen" Analyse ob etwas doppelt ist...
Man trenne hier erstmal "Visualisierung von Logik"!... wieviel Pixel "ein Auto" einnimmt spielt doch keine Rolle, es geht um "Auto" oder "nicht Auto" an einer möglichen eineindeutigen "Position".

=> es geht also um zufällig verteilte Autos auf einer endlichen Anzahl möglicher Positionen... richtig ?

-> warum dann nicht zunächst eine Liste mit einem Index von 0...max Positions-1, wo pro Index zunächstmal eine Koordinate hinterlegt ist... so kann man Straßen, Plätze oder was weiß ich mit real möglichen Autopositionen definieren geometrisch frei positionieren, letztendlich interessiert nur die Gesamtszahl der möglichen Positionen

-> jetzt erzeuge eine 2. Liste nur mit IndexEinträgen von 0...max Positions-1 ohne weitere Daten und eine 3. leere Liste für Indexwerte auch gang ohne weitere Daten
-> nun Rufe eine RandomFunktion mit der aktuellen Anzahl der 2.Liste als Wertebereich auf und entferne jeweils das "Random-Element" aus dieser 2.Liste... und füg der 3. Liste den Indexeintrag hinzu
-> beim nächsten Randomaufruf wieder das gleiche... so ist 100% garantiert das du zufällige und sogleich eineindeutige IndexPositionen bekommst

=> zum Schluss nimm alle Indexwerte aus der 3. Liste und "male" per Liste 1 an den dazu passenden Positionen deine 4x4 Autos oder was auch immer

Enddrew 8. Okt 2017 17:14

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind
 
Okay, vielen Dank. Ich werde es versuchen das so zu programmieren.:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz