Mal in die einzelnen Bestandteile zerlegt:
- Winkelbestimmung :(Math.Atan2(y - center.X, x - center.Y) * 180.0 / Math.PI) - baseAngle
- Obere Sperre: Math.Min(360.0F - blockAngle / 2,
- Untere Sperre: Math.Max(blockAngle / 2,
- Damit das Ergebnis in [0, 360°) liegt: + 720.0F) Mod 360.0F))
Die Winkelbestimmung sollte klar sein, der Atan2 gibt den Winkel zwischen center und dem Punkt bzgl. 0° an. Anschließend wird auf den Basiswinkel rotiert, der die Seite des Blocks angibt. Danach wird von dort aus mit oberer und unterer Schranke verhindert, dass ungültige Werte angenommen werden.
Die obere Sperre gibt eben an, dass der Winkel nicht größer wird, als durch den Block zulässig. Die untere Sperre macht selbiges. baseAngle bildet die Mitte des Blocks, d.h. der Block liegt im Intervall (baseAngle - blockAngle / 2, baseAngle + blockAngle / 2).
Der letzte Punkt ist optional. Die 720.0F werden aufaddiert, damit das Ergebnis zwangsweise positiv ist. Sowohl das Ergebnis von Atan2, als auch baseAngle können negativ sein. Würde man es genau nehmen, müsste man
Viele Grüße
~blaze~
- Winkelbestimmung :(Math.Atan2(y - center.X, x - center.Y) * 180.0 / Math.PI) - baseAngle
- Obere Sperre: Math.Min(360.0F - blockAngle / 2,
- Untere Sperre: Math.Max(blockAngle / 2,
- Damit das Ergebnis in [0, 360°) liegt: + 720.0F) Mod 360.0F))
Die Winkelbestimmung sollte klar sein, der Atan2 gibt den Winkel zwischen center und dem Punkt bzgl. 0° an. Anschließend wird auf den Basiswinkel rotiert, der die Seite des Blocks angibt. Danach wird von dort aus mit oberer und unterer Schranke verhindert, dass ungültige Werte angenommen werden.
Die obere Sperre gibt eben an, dass der Winkel nicht größer wird, als durch den Block zulässig. Die untere Sperre macht selbiges. baseAngle bildet die Mitte des Blocks, d.h. der Block liegt im Intervall (baseAngle - blockAngle / 2, baseAngle + blockAngle / 2).
Der letzte Punkt ist optional. Die 720.0F werden aufaddiert, damit das Ergebnis zwangsweise positiv ist. Sowohl das Ergebnis von Atan2, als auch baseAngle können negativ sein. Würde man es genau nehmen, müsste man
baseAngle Mod 360
statt baseAngle
schreiben, aber ich gehe davon aus, dass der Winkel in [-359.9...9°, 359.9...9°] liegt.Viele Grüße
~blaze~