/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
OpenGL - stjernekort
Fra : Doe


Dato : 13-08-06 23:36

Dette er såmen ikke specielt OpenGL relateret men det skal bruges til et
OpenGL projekt og min matematik er ikke hvad den har været (eller også er
det blevet for sent på aftenen)!

I OpenGL er midterpunktet 0,0 (x,y) og så skal man gå en relativ værdi ud
fra det for at positionére sig (enten + eller -). Jeg skal have lavet en
typisk stjernehimmel med f.eks. 100 prikker på og jeg havde tænkt, at læse
disse 100 random værdier ind i et array og så holde styr på dem dér. Men...

Jeg har denne kode:

int RANGE_MIN;
int RANGE_MAX;
int i = 0;
float x = 0.0f;
float y = 0.0f;

for (int c=0; c<=100; c++)
{

// Get X axis
RANGE_MIN = 0;
RANGE_MAX = 5300;
i = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
x = (double)i / (double)1000;

// Get Y axis
RANGE_MIN = 0;
RANGE_MAX = 4000;
i = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
y = (double)i / (double)1000;

glVertex3f(x, y, 0.0f);

}

[CUT]

Dette giver 100 tilfældige tal mellem 0.0 og +4.0 (X) samt 0.0 og +5.3 (Y).
Men hvordan er det nu lige, at jeg får lavet tallet om til minus således, at
jeg kan få vist noget i minus koordinaterne? Jeg kan jo ikke bare have
RANGE_MIN til -4000, da slutresultatet så kun er negativt.

Eller er der andre måder at gøre det på (det er der hélt sikkert)?

Meningen er så at få det ind i et array og derfor få stjernerne til at køre
med forskellig hastighed hen over himlen.



 
 
Morten W. Nissen (14-08-2006)
Kommentar
Fra : Morten W. Nissen


Dato : 14-08-06 07:30

On Mon, 14 Aug 2006 00:35:41 +0200, Doe <doe@invalid.xyz> wrote:
>
> Dette giver 100 tilfældige tal mellem 0.0 og +4.0 (X) samt 0.0 og +5.3
> (Y).
> Men hvordan er det nu lige, at jeg får lavet tallet om til minus
> således, at
> jeg kan få vist noget i minus koordinaterne? Jeg kan jo ikke bare have
> RANGE_MIN til -4000, da slutresultatet så kun er negativt.
>

Se det lidt som et offset, hvis du vil have mellem -4000 og 4000 så lav
et tal mellem 0 og 8000, træk så 4000 fra. Så vil 0 være -4000 og 8000
være 4000.

../Morten

Doe (14-08-2006)
Kommentar
Fra : Doe


Dato : 14-08-06 12:20

>> Dette giver 100 tilfældige tal mellem 0.0 og +4.0 (X) samt 0.0 og +5.3
>> (Y).
>> Men hvordan er det nu lige, at jeg får lavet tallet om til minus
>> således, at
>> jeg kan få vist noget i minus koordinaterne? Jeg kan jo ikke bare have
>> RANGE_MIN til -4000, da slutresultatet så kun er negativt.
>
> Se det lidt som et offset, hvis du vil have mellem -4000 og 4000 så lav
> et tal mellem 0 og 8000, træk så 4000 fra. Så vil 0 være -4000 og 8000
> være 4000.

Hov, det var her den skulle være:
Ahhh ja - god idé. Det er lige med at tænke så logisk, tak



Ivan Johansen (14-08-2006)
Kommentar
Fra : Ivan Johansen


Dato : 14-08-06 08:56

Doe wrote:
> RANGE_MIN = 0;
> RANGE_MAX = 4000;
> i = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
> y = (double)i / (double)1000;

Din formel er ikke helt korrekt. Dette er ikke testet, men prøv med:
i = (((double) rand() / (double) RAND_MAX) * (RANGE_MAX - RANGE_MIN) +
RANGE_MIN);

Så kan du godt sætte RANGE_MIN=-4000

Ivan Johansen

Doe (14-08-2006)
Kommentar
Fra : Doe


Dato : 14-08-06 12:19

> Doe wrote:
>> RANGE_MIN = 0;
>> RANGE_MAX = 4000;
>> i = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
>> y = (double)i / (double)1000;
>
> Din formel er ikke helt korrekt. Dette er ikke testet, men prøv med:
> i = (((double) rand() / (double) RAND_MAX) * (RANGE_MAX - RANGE_MIN) +
> RANGE_MIN);
> Så kan du godt sætte RANGE_MIN=-4000

Ahhh ja - god idé. Det er lige med at tænke så logisk, tak



Doe (14-08-2006)
Kommentar
Fra : Doe


Dato : 14-08-06 12:30

>> RANGE_MIN = 0;
>> RANGE_MAX = 4000;
>> i = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
>> y = (double)i / (double)1000;
>
> Din formel er ikke helt korrekt. Dette er ikke testet, men prøv med:
> i = (((double) rand() / (double) RAND_MAX) * (RANGE_MAX - RANGE_MIN) +
> RANGE_MIN);
> Så kan du godt sætte RANGE_MIN=-4000

Ja, matematik har sgu' desværre aldrig været min stærke side men jeg må
konstatere at det virker. Mit eksempel er taget direkte ud fra C++ hjælpen.
Tak.



Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407947
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste