Hallo,
hier würde ich ansetzen:
Code:
if (winkel<360) winkel=winkel+360;
Müsste das nicht so aussehen:
Code:
if (winkel<0) winkel=winkel+360;

Noch besser wäre eine while-Schleife, damit es z.B. auch für Winkel -500° oder +999° klappt? Mit den ersten beiden Abfragen wird ja nur 1x subtrahiert/addiert um den Winkel in den Bereich 0...360° zu bekommen.
Code:
while(winkel<0){winkel+=360;}
while(winkel>=360){winkel-=360;}
Die 4 IF-Abfragen kann man noch optimieren.
In deinem Fall werden ja immer alle 4 Abfragen geprüft.
Werden die letzten drei IF-Abfragen mit ELSEIF gemacht, dann werden im Durchschnitt nur noch 2,5 IF-Abfragen geprüft.
Mit einer sog. binären Suche werden immer nur 2 IF-Abfragen geprüft.
Das bringt noch einen klitzekleinen Geschwindigkeitsvorteil 
Code:
if(winkel<=180)
{
if(winkel<=90){/* 0...90° */}
else{/* 90...180° */}
}
else
{
if(winkel<=270){/* 180...270° */}
else{/* 270...360° */}
}
Gibt deine Funktion dann die richtigen Werte für sinus(0), sinus(90), sinus(180), sinus(270), sinus(360), ... aus?
Die Cosinus-Funktion musst du auch entsprechend anpassen, oder einfach
Code:
short cosinus(short winkel)
{
return sinus(winkel+90);
}
verwenden.
Ich hoffe, das hilft dir weiter
Grüße, Bernhard
Lesezeichen