Hi, ich habe einen Motor mit 16 Bit Auflösung (0-65536) für eine Umdrehenung. Ich möchte jetzt daraus einen Cos und Sin machen, so dass wenn ich ihn drehe. Hatte gedacht den Wertebereich (65536 - die Hälfte), damit ich einen Bereich von -32768 bis + 3232768 bekomme. Jedoch würde er bei jeder Umdrehung wieder von + nach - schlagartig ändern. Wie bekomme ich aus einem solchen Wertebereich eine Sinus Funktion? LG
Die üblichen sin()-Funktionen nehmen als Parameter den Winkel im Bogenmass, also für eine Umdrehung 0..2*Pi. Dein Zähler läuft für eine Umdrehung von 0..65535 Der Rest ist ein einfacher Dreisatz. Oliver
dachte mir Sin/Cos Arrays zu schreiben. Die Antwort von Oliver ist mir noch nicht so ganz eindeutig!
1 | int amount = 65536; |
2 | int cosinus_array[65536]; |
3 | int sinus_array[65536]; |
4 | |
5 | // COSINUS - START 32768
|
6 | for (i=0; i<(amount-1); i++) |
7 | cosinus_array[i]=((amount/2)-1)*cos((double)i/amount*2*3.14); |
8 | |
9 | // SINUS - START 0
|
10 | for (i=0; i<(amount-1); i++) |
11 | sinus_array[i]=((amount/2)-1)*sin((double)i/amount*2*3.14); |
Hast du dir mal Überlegt wie viel Speicher dabei drauf geht? Es reicht wenn man nur einen Quadranten der Sinuskurve ablegt. Den Rest kann man durch Vorzeichenwechsel und/oder Spiegeln ermitteln.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.