
Ist es möglich alle Winkel im voraus zu berechnen?
Bei -> sin oder cos(Winkel.f)
Wobei Winkel ja irgendwas sein kann 11.2938.. !?
Wie machen das die Spiele?
Code: Alles auswählen
EnableExplicit
; Hier kann man die Präzision der Sinus-Tabelle einstellen
#SINE_PRECISION = 12
; Hier berechnen wir ein paar Werte vor, die wir benötigen
#_sineMax = 1 << #SINE_PRECISION
#_sineFac = #_sineMax / #PI / 2
#_sineMask = #_sineMax - 1
Global Dim _sineTable.f(#_sineMax - 1)
; Muss aufgerufen werden um die Sinus-Tabelle zu initialisieren
Procedure initSineTable()
Protected i.i
For i = 0 To #_sineMax - 1
_sineTable(i) = Sin(i * 2 * #PI / #_sineMax)
Next
EndProcedure
; Das ist nun unsere neue Sinus-Funktion, aber als Makro
Macro fastSin(a)
_sineTable(Int(a * #_sineFac) & #_sineMask)
EndMacro
initSineTable()
; Hier berechnen wir die durchschnittliche Abweichung zwischen der
; Sinus-Tabelle und der originalen Sinus-Funktion
Define i.i, sumDiff.d
For i = -100 To 100
sumDiff + Abs(Sin(i) - fastSin(i))
Next
Debug "Durchschnittliche Abweichung: " + StrD(sumDiff / 201.0, 20)