Hallo,
hier würde ich ansetzen:
Müsste das nicht so aussehen:Code:if (winkel<360) winkel=winkel+360;
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.
Die 4 IF-Abfragen kann man noch optimieren.Code:while(winkel<0){winkel+=360;} while(winkel>=360){winkel-=360;}
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![]()
Gibt deine Funktion dann die richtigen Werte für sinus(0), sinus(90), sinus(180), sinus(270), sinus(360), ... aus?Code:if(winkel<=180) { if(winkel<=90){/* 0...90° */} else{/* 90...180° */} } else { if(winkel<=270){/* 180...270° */} else{/* 270...360° */} }
Die Cosinus-Funktion musst du auch entsprechend anpassen, oder einfach
verwenden.Code:short cosinus(short winkel) { return sinus(winkel+90); }
Ich hoffe, das hilft dir weiter
Grüße, Bernhard








Zitieren

Lesezeichen