Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » besserer code für blinkenden curosr?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.10.2003, 16:46 Uhr
~RIP
Gast


Ich habe gelesen das die Verwendung von Sinus und Cosinus sehr rechenintensiv ist - da das die einzige Zeile ist in der ich sin verwende würde ich diese gerne durch etwas anderen ersetzten (dann brauch ich math.h nicht einbinden) - nur mir fällt nix ein - vielleicht kann mir da jemand helfen?

Die if-Bedingsung soll in regelmäßigen Abständen true sein damit der Cursor gezeichnet wird ... also ein blinkender Curosr


C++:
if (sin (clock()/50) >0)
{
    // code zum Zeichen eines Cursors in einer OpenGL-Console
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.10.2003, 17:03 Uhr
0xdeadbeef
Gott
(Operator)


Kommt drauf an. Welche Werte kann clock zurückgeben?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2003, 19:07 Uhr
~RIP
Gast


clock() gibt die vergangene Zeit in ms seit Programmstart an ...

ich könne dafür auch andere counter benutzen ... ich habe z.B. noch die Variable frame zur Verfügung - diese wird 50 mal pro Sekunde um 1 erhöht (weil ich das Programm auf 50fps begrenzt habe)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.10.2003, 19:21 Uhr
0xdeadbeef
Gott
(Operator)


OK, was geht, ist folgendes. Wir können clock()/50 quasi modulo 2*pi nehmen. Wenn es zwischen 0 und pi (beides exklusive) liegt, ist der sinus größer als null, sonst nicht. Also:

C++:
unsigned long tick = clock()/50;
double tick_mod_2pi = tick - ((unsigned long) (tick / PI / 2)) * 2 * PI;
if(tick_mod_2pi > 0 && tick_mod_2pi < PI) {

}


mit PI ~~ 3.14159265359L. Ich bin nicht sicher, ob das in der math.h definiert ist; wenn nicht, sollte sich das leicht finden lassen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 01.10.2003 um 19:22 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.10.2003, 19:40 Uhr
virtual
Sexiest Bit alive
(Operator)


Wie kompliziert!
Der Cursor blinkt also. Dh er ist genau die Hälfte der Zeit an und die andere Hälfte aus, gelle?
Wenn ichs weiterhin richtig verstanden habe, dann wird clock() 50 Mal in der Sekunde erhöht.

Dh. Wenn der Cursor pro Sekunde einmal an+ausgehen soll ist der entsprechende Code:

C++:
if (clock()%50 >= 25)
{
   /* Cursor an */
}


Für N Mal An/Ausschalten dann eben entsprechend:

C++:
if (clock()%(50/N) >= 25/N)
{
   /* Cursor an */
}


Oder habe ich die Aufgabe nicht verstanden?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 01.10.2003 um 19:42 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.10.2003, 20:56 Uhr
~RIP
Gast


thx - beide Varianten habe ich probiert ... beide funktionieren

@virtual: clock() wird pro Sekunde um 1000 erhöht, deswegen:

C++:
if (clock()%1000 >= 500)
{
   // Cursor an
}


... aber egal

Ich habe die 2te Variante verwendet ... BIG THX!

PS: übrigens finde ich den name 0xdeadbeef ziemlich genial
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: