Wie schnell is Cosinus und Sinus?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Dreamora

BeitragDo, Jul 13, 2006 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
??

mySin(int(winkel))

bzw. mySin(int(winkel + alpha))
für Cosinus
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

stfighter01

BeitragDo, Jul 13, 2006 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, so.

index = ( ( grad * genauigkeit ) / 360 ) Mod genauigkeit
If index < 0 Then index = index + genauigkeit EndIf
wert = sinusarray(index)

bzw grad + 90° für cosinus
Denken hilft!
 

Dreamora

BeitragFr, Jul 14, 2006 8:51
Antworten mit Zitat
Benutzer-Profile anzeigen
macht 0 sinn

1. Mod kann nicht < 0 werden. Noch kann der Wert kleiner 0 sein, da man sonst anderweitig irgendwie denn wurm drin hat (bzw. die standardmässige angle + 360 mod 360 anpassung net drin hat, die man haben sollte ... zb als Funktion WrapAngle)

2. Wozu *genauigkeit? entweder du hast den winkel oder du hast ihn nicht. Genauigkeit macht da gegen 0% Sinn wenn nicht sogar negativ. Denn deine Genauigkeit die du hast bei der Tabelle ist 1.0 (bei 0 - 359 Werten). Es ist von daher ziemlich Schnuppe was du sonst rumtinkerst. Das einzige was es macht, ist die Berechnung verlangsamen, wie du ja gemerkt hast.

Der Sinn einer LUT ist es, für jeden Wert an genau einem Ort einmal nachzusehen und das ohne Berechnungen. Sonst könnte man sich die LUT gleich ganz sparen, da heutige Systeme so Mathe optimiert sind, dass dann selbst blitz3d / bb+ schnell genug sind. (auf BM macht LUT garkeinen sinn mehr, da GCC einfach zu gut optimiert ist. Auch SQRT mit Bitshifting approxen zu wollen bringt da nix mehr weil die module vorab schon schneller sind als alle optimierungen die so im netz rumliegen)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

stfighter01

BeitragFr, Jul 14, 2006 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@dreamora
mod < 0 funktioniert
warum sollte eine division < 0 keinen restwert haben können ?

-4.5 mod 2 = -0.5

um es einigermassen vernünftig nutzen zu können sollte man eben winkel von 0-360° angeben können.

kann man aber nicht wenn man 10000 sinuswerte in einer tabelle gespeichert hat -> von daher muss man zuvor den index berechnen.
hoffe jetzt ist es verständlich.
sieh dir mein bsp. in der codesektion an.
Denken hilft!
 

Dreamora

BeitragFr, Jul 14, 2006 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Jedem das seine.
Aber bei der Funktion ist es kein wunder das Sin / cos schneller sind, weil ganz einfach zu viele Operationen und Überprüfungen für einen LUT Call drin sind.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Lukas

BeitragFr, Jul 14, 2006 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Und die Moral für Mich:

Ich benutze jetzt doch keinen Array, da es anscheinend nicht so viel ausmacht, und Sin&Cos gehighlightet(?) werden, und sie deshalb übersichtlicher sind.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group