brauche random command
-
Hi,
hat jemand ne ahnung wie ich das so machen kann das bei den codedist = v.xyz.x * v.xyz.x + v.xyz.y - v.xyz.y + v.xyz.z - v.xyz.z;
das *, + oder - per zufall generiert wird also das z.b. da wo jetzt * genommen eird durch zufall mal + oder - genommen wird ?
-
EDIT: Siehe nächsten Beitrag für die Lösung;
Ja, nur ist es umständlich das in einer Zeile zu machen wie du gezeigt hast. So geht es einfacher.
int x = 0; for(int i = 0; i < 100; ++i) { switch(rand()%4) { case 0: x += 3; break; case 1: x -= 3; break; case 2: x *= 3; break; case 3: x /= 3; break; }
-
Naja, hab wohl etwas flott gelesen. Für deinen Fall bedeutet dies:
dist = v.xyz.x + ((rand() % 2) ? v.xyz.x : -v.xyz.x) + v.xyz.y - v.xyz.y + v.xyz.z - v.xyz.z;
Geht also doch in einer Zeile. Musst aber um "zufälligkeit" zu erzeugen vorher an einer etwas globaleren Stelle _einmal_ srand(time(0)) aufrufen um die Zufallsfunktion zu initialisieren.
-
also irgendwie funzt das überhaupt nicht wenn ich das jetzt zu ner exe build dann bekomm ich 98 error in der ganzen file ich geb dir mal ein stück mehr code
[cpp] dist_max = (float) (HALF_RND_MAX + HALF_RND_MAX);
for (i=0; i<MAX_STARS; i++) {
dist = dist_max;
while (dist >= dist_max) {
v.xyz.x = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);
v.xyz.y = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);
v.xyz.z = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);dist = v.xyz.x * v.xyz.x + v.xyz.y - v.xyz.y + v.xyz.z - v.xyz.z;
}
vm_vec_copy_normalize(&Stars[i].pos, &v);[/cpp] ich hoffe du kannst jetzt jetzt hin kriegen trotzdem danke jetzt schonmaldas was rot ist soll per zufall +, -, * oder / sein
-
Wie wär's mit:
float Verknuepfe( float a, float b) { switch(rand() % 4) { case 0: return a+b; case 1: return a-b; case 2: return a*b; case 3: return (b==0.0f) ? a : a/b; } }
-
sorry aber wo muss das hin ich hab vergessen zu sagen das ich nen noob bin
-
Naja, dieser Funktion kannst Du zwei Werte übergeben und sie gibt Dir zufällig die Summe, die Differenz das Produkt oder den Quotienten zurück.
das heißt, statt a o b // o soll sein +,-,*,/
Verknuepfe(a,b);
Größere Ausdrücke kannst Du so bauen:
Verknuepfe(Verknuepfe(a,b),c);
das ist das gleiche wie
(a o b) o ceine Schwäche hat das ganze aber:
Er klammert nicht richtig um:a+b*c müßte eigentlich so ausgewertet werden: a+(b*c), wenn der Ausdruck aber wie oben geschrieben dasteht, dann wird (a+b)*c berechnet...
keine Ahnung, inwieweit Dich das stört.MfG Jester
-
[cpp]dist_max = (float) (HALF_RND_MAX + HALF_RND_MAX);
for (i=0; i<MAX_STARS; i++) {
dist = dist_max;
while (dist >= dist_max) {
v.xyz.x = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);
v.xyz.y = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);
v.xyz.z = (float) ((myrand() & RND_MAX_MASK) - HALF_RND_MAX);dist = v.xyz.x * v.xyz.x + v.xyz.y - v.xyz.y + v.xyz.z - v.xyz.z;
float Verknuepfe( float a, float b)
{
switch(rand() % 4)
{
case 0: return a+b;
case 1: return a-b;
case 2: return a*b;
case 3: return (b==0.0f) ? a : a/b;
}
}
}
vm_vec_copy_normalize(&Stars[i].pos, &v);[/cpp]also einfach so oder ?
-
Nein, das Verknuepfe ist eine Funktion. Die mußt Du außerhalb hinschreiben!
Und wenn DU dann was berechnen willst rufst Du sie auf.