Wie schnell is Cosinus und Sinus?
Übersicht

Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
??
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group