AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Random Generator mit In-Output

Ein Thema von tumo · begonnen am 19. Mär 2018 · letzter Beitrag vom 21. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
tumo

Registriert seit: 28. Apr 2014
46 Beiträge
 
Delphi 10.3 Rio
 
#1

Random Generator mit In-Output

  Alt 19. Mär 2018, 18:43
Hallo,

ja, der Titel ist verwirrend, aber umschreibt ganz gut was ich versuche zu bekommen.

STORY: Ich schreibe im Rahmen eine Schulprojektes ein kleines Programm was aus einem Bild bzw. dessen Farben/Pixeln Töne mittels MIDI erzeugt. Das funktioniert bisher auch ganz gut. Nun hab ich das Problem, dass ich ja nicht immer den gleichen Ton hören will, also brauch ich eine Art Zufallsgenerator.

Nun zum Problem: Ich kann (wahrscheinlich) NICHT den Delphi internen Generator nehmen. Wenn ich ein Bild lade, das abspiele und mich von der grandiosen Musik beschallen lassen hab, ist alles prima, wenn ich das Bild nun erneut lade, sollte ja auch das gleiche "Lied" entstehen, entsprechend muss ich einen Zufallsgenerator nutzen, dem ich einen Input geben kann, der darauf hin immer den gleichen Output gibt.

Eine Zufallszahl mit gegebenen Werten zu erzeugen hab ich bisher semi-professionell mit einem XorShift gelöst, nicht schön aber es tut was es soll.
Jetzt brauch ich aber möglichst einen Weg die entstandene Zahl (derzeit ein Cardinal) in einen von mir definierten Bereich zu pressen, ähnlich wie random(10) nur noch Zahlen zwischen 0 und 9 ausgibt.

Also für alle lesefaulen (und alle, die meine eher komische Art Fragen zu stellen nicht entziffern können):

Wie bekomme ich einen Zufallsgenerator der mir bei gleichen Input immer den gleichen Output serviert?
und/oder
Wie bekomme ich große Zahlen vernünftig in einen definierten Zahlenbereich komprimiert? (also z.B.: 184 492 344 in einen Bereich zwischen 0 und 87)

Alternativ könnt ihr mir auch nen Googleansatz geben, ich hab nähmlich einfach keine Ideen mehr...

Danke im Vorraus

Geändert von tumo (19. Mär 2018 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:01
Zitat:
Wie bekomme ich große Zahlen vernünftig in einen definierten Zahlenbereich komprimiert? (also z.B.: 184 492 344 in einen Bereich zwischen 0 und 87)
Code:
184492244 mod 87
Wenn Du einen Bereich von 0..87 benötigst, warum generierst Du dir nicht die Zufallszahlen in diesem Bereich?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#3

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:03
http://www.delphibasics.co.uk/RTL.as...dCode1=Yes#Ex1

Die Funktion Random von Delphi liefert immer die gleichen Werte, sofern nicht Randomize aufgerufen wird.
D. H.: Man bekommt als "Zufall" immer die gleiche Zahlenreihenfolge.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:48
Die Funktion Random von Delphi liefert immer die gleichen Werte, sofern nicht Randomize aufgerufen wird.
Darum ruft die VCL etwas aktuellerer Delphis seit sehr vielen Jahren einmal beim Programmstart das Randomize auf, damit dem nicht mehr so ist, selbst wenn der Entwickler nicht dran gedacht hat.

PS: mod 88
und ratet mal, was Delphi-Referenz durchsuchenRandom(mitparameter) intern macht. (auch sowas in der Art)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mär 2018 um 19:53 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#5

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:55
Heißt das, dass man in "aktuellen" Delphis mit Bordmitteln nicht mehr an eine reproduzierbare Reihenfolge von Zufallszahlen kommen kann?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:57
Wenn du "früher" den Start nicht selbst initialisiert hast,
dann war dein Code sowieso nie reproduzierbar.

Delphi-Referenz durchsuchenRandSeed
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 19:57
@tumo: Warum führst du nicht eine Liste, in der du vermerkst, für welche Farbe du welche Zufallszahl erzeugt hast und lädst die beim Programmstart? Wenn du die Zahl brauchst, schau zuerst in der Liste nach, wenn du sie findest, gut, wenn nicht erzeuge sie+speichere sie in der Liste.

Da würde sich eine TStringList anbieten mit Farbe=Zahl-Paaren.

Wäre das eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Random Generator mit In-Output

  Alt 19. Mär 2018, 20:36
Ich schliesse mich der Tigerin da an, da für mich die Aussage "Zufall" nicht in Einklang mit "festen Wert" funktioniert.
Oder Du schreibst Deine Ton-Routine um, das die einen vollen (RGB) Farbwert akzeptiert und da eventuell mit Random() noch etwas Variation reinbringen, kannst ja jeder Grundfarbe mit Random() nachhelfen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
tumo

Registriert seit: 28. Apr 2014
46 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Random Generator mit In-Output

  Alt 20. Mär 2018, 19:17
@Klaus01 Ja, ääh, hätte man auch selber drauf kommen können... Danke Zur zweiten Frage: Wie? das ist ja das Problem. Wie generiere ich einen Zufallswert in einem festgelegten Bereich. Jetzt kann ich mich ja einfach mit xor und shl/shr austoben und am Ende mod ARange + 1 nutzen, das kommt denke ich mal nah genug ran.

@himitsu Ich nehme mal an das PS ging an mich. Ja, das macht etwas in die Richtung, allerdings versteh ich nicht wie/warum das funktioniert und was da passiert, sowas stört mich eigentlich immer. Schließlich sollte wenigstens der Programmierer wissen, was das Programm wie macht.

@TigerLilly @KodeZwerg Das ist genau das was ich nicht möchte, aufgrund von Gründen. Wenn jetzt zum Beispiel ein sehr langer Bereich mir nur weißen Pixeln kommt, soll mich ja nicht 30 (oder mehr) mal der gleiche Ton nerven. Ist auch mein Fehler, hab das in der Fragenstellung komplett vergessen zu erwähnen. Also möchte ich quasi einen Startwert (z.B.: aus der Durchschnittsfarbe oder dem Hash-Wert (wieder ein eigenes Thema was ich nicht verstehe)) für ein Bild berechnen und auf Basis davon immer das Ergebnis des Zufallsalgoritmus wieder in den "Zufall" einfließen lassen, sodass zwei aufeinanderfolgende Farben nicht identisch klingen (bzw. es wäre ein großer Zufall wenn ).
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Random Generator mit In-Output

  Alt 20. Mär 2018, 19:47
Oder Du schreibst Deine Ton-Routine um, das die einen vollen (RGB) Farbwert akzeptiert und da eventuell mit Random() noch etwas Variation reinbringen, kannst ja jeder Grundfarbe mit Random() nachhelfen.
Das meinte ich mit "es folgen zwei gleiche Farben" aber mit ein wenig Random() zum Farbwert hast du Variation.
Beispiel für weiß = R=255 G=255 B=255, wenn du nun zu jedem R G B wert ein + oder - Random zufügst = Variation.

Ist es nicht das was du wolltest?

ps: das ergebiss der 3 werte kannst du natürlich noch mit dem "mod" runterrechnen.

pps: selbst das + oder - kannst du per random(1) bestimmen lassen, mehr variation kann ich mir gerade nicht vorstellen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (20. Mär 2018 um 20:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
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