Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-12-2004, 13:29   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 368
Zufallszahl

Hallo

Möchte eine Zufallszahl erstellen zwischen-100 und +100!
Sie sollte nur ganz selten große Sprünge machen!
Soolten selten größer als zehn sein!und dass die zufallszahl über 85 und und unter -85 geht sollte auch nicht oft vorkommen!
hab es mit random versucht aber da funktioniert das irgendwie nicht richtig da es öfters zu große sprünge macht!

mfg jochi
Jochi ist offline   Mit Zitat antworten
Alt 30-12-2004, 15:25   #2 (permalink)
*warg*
 
Registriert seit: May 2002
Ort: Berlin
Beiträge: 261
hi,

*am kopf kratzt*
wie wäre es mit dem vorschlag:

erstell dir eine containerVariable und eine zufallsvariable zwischen -15 und 15 und addiere beide miteinander. Das bringt dich vll. deinem gewünschten ergebnis näher.
Aber das ist auch nur teils gut, weil es vorkommen kann, dass du dann leicht über 85 rauskommst.. und dann musst du rumbauen:
deshalb würde ich noch ne abfrage machen... wenn dein container bei <= -90 ist soll er auf jeden Fall den betrag von der zufallsvariablen hinzuzählen. Bei container>=90 soll er auf jedenfall den betrag der zufallszahl vom container abziehen.
desweiteren solltest du nicht random() sondern math.random() benutzten (siehe referenz)
.. *überleg* . *weiterÜberlegt* .. wie erstellst du eigentlich negative zufallszahlen ? *so fragt*

schönen Gruß
_Tuffy
__________________
"nimm dir das leben - es gehört dir!"
"die realität versucht mich einzuholen - doch ich bin schneller !"
Tuffyfant ist offline   Mit Zitat antworten
Alt 30-12-2004, 15:28   #3 (permalink)
hobbyflasher
 
Benutzerbild von lasic+
 
Registriert seit: Jun 2003
Ort: NRW
Beiträge: 229
was du meins ist algorythmisch einfach nicht möglich. Was du machen kannst ist folgendes:

Die heicklen Situationen, die du vermeiden willst musste gesondert behandeln. Wenn du z.B. die Zahlen < -85 und >85 nicht oft haben willst, musst du noch eine extra Anfrage starten, so ungefähr:

x ist deine per Random ermittelte Zahl zwischen -100 und 100. Nun fragste die Zahl ab:

if(x < -85 || x > 85) ==> das ist ja das, was bei dir seltener vorkommen muss

in dieser if kannst du dann noch ein Mal würfeln, damit hasst du die Wahrscheintlichkeit um einiges verringert.

Und so muss du mit allen kritischen Bereichen verfahren. Die Entscheidung was du nach der Abfrage machst ist natürlich dir überlassen, du kannst noch ein Mal würfeln und dann die Zahl annehmen, kannst aber auch in einer Schleife so oft wie du willst würfeln.
__________________
gruß lasic+
lasic+ ist offline   Mit Zitat antworten
Alt 30-12-2004, 15:46   #4 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
jochi...das ist ne ganz ganz knifflige sache, was du da dir vorstellst...

was für ne verteilung hättest du denn gerne?
ich meine wie oft von sagen wir 1000 mal, soll/darf ne zahl größer 85 oder kleiner -85 vorkommen?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 30-12-2004, 18:30   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Um die Grösse der Sprünge zu kontrollieren, musst du ja sowas wie neuerWert = alterWert + zufallsWert machen, wobei zufallsWert auch negativ sein kann und aus einem bestimmten Bereich [-maxSprung..maxSprung] kommt.
Je nachdem, wo sich alterWert gerade befindet, könntest du ja das Interval, aus dem der zufallsWert erzeugt wird, neu festlegen. Auf die Art könntest du dann die Häufigkeit der Werte > 85 kontrollieren. Also z.B. wenn alterWert 75 ist, dann legst du die Obergrenze auf 85 und die Untergrenze auf alterWert-maxSprung.
Wenn du jetzt noch ab und zu Werte > 85 zulassen willst, dann verschiebst du die Obergrenze entsprechend.

ActionScript:
  1. function getNextRandom( lastRandom){
  2.     var maxJump = 20;
  3.     var percentLower85 = 50;
  4.     //
  5.     var lowerBound = Math.max( -100, lastRandom - maxJump);
  6.     if( lowerBound < -85 && random(100) <= percentLower85){
  7.         lowerBound = -85;
  8.     }
  9.     var upperBound = Math.min( 100, lastRandom + maxJump);
  10.     if( upperBound > 85 && random(100) <= percentLower85){
  11.         upperBound = 85;
  12.     }
  13.     return random(upperBound - lowerBound) + lowerBound;
  14. }
  15.  
  16.  
  17. var x = 0;
  18. var depth = 0;
  19.  
  20. lineStyle(0);
  21. moveTo( 0, -85);
  22. lineTo( 500, -85);
  23. moveTo( 0, 85);
  24. lineTo( 500, 85);
  25.  
  26. onEnterFrame = function(){
  27.     var y = getNextRandom( x);
  28.     depth++;
  29.     var mc = this.createEmptyMovieClip("mc" + depth, depth);
  30.     mc.onEnterFrame = function(){
  31.         this._x -= 5;
  32.         if( this._x < 0){
  33.             this.removeMovieClip();
  34.         }
  35.     }
  36.     mc._x = 500;
  37.     mc._y = y;
  38.     mc.lineStyle(5, 0xff0000);
  39.     mc.lineTo(1,1);
  40.     x = y;
  41. }

So in der Art könnte es aussehen. Zur Kontrolle zeichne
ich unten die erzeugten Punkte in ein Diagramm ein. Die
Linien sind -85 und 85.

maxJump könntest du jetzt auch noch vom Zufall abängig machen,
damit du ab und zu auch noch grössere Sprünge drin hast.

mfg. r.








mfg. r.

Geändert von bokel (30-12-2004 um 18:56 Uhr)
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele