function phi = fast_atan2(y, x) % FAST_ATAN2 - Extrem schnelle, vektorisierte Approximation von atan2(y, x) % Optimiert auf maximale Rechengeschwindigkeit in MATLAB. % Konstanten definieren PI = 3.141592653589793; HALF_PI = 1.570796326794897; % Beträge für die Quadrantenbestimmung abs_x = abs(x); abs_y = abs(y); % Maske für die Bedingung |x| >= |y| mask = (abs_x >= abs_y); % Zähler und Nenner für den Quotienten effizient spiegeln % Verhindert Division durch Null, solange nicht x=0 und y=0 gleichzeitig gilt num = abs_y; den = abs_x; % Wo |x| < |y|, tauschen wir Zähler und Nenner um num(~mask) = abs_x(~mask); den(~mask) = abs_y(~mask); % Der Quotient z liegt nun garantiert im Intervall [0, 1] z = num ./ den; % Schnelle Polynom-Approximation für den Bereich [0, 1] % Formel: z * (0.9724 - 0.1919 * z^2) phi = z .* (0.9724 - 0.1919 .* z.^2); % Winkel korrigieren für Fälle, in denen |x| < |y| (Spiegelung an der Hauptdiagonale) phi(~mask) = HALF_PI - phi(~mask); % Quadranten-Korrektur basierend auf den Vorzeichen von x und y % Nutzt logische Indizierung statt langsamer if-Bedingungen x_neg = (x < 0); y_neg = (y < 0); % 2. & 3. Quadrant: x ist negativ % Wenn y positiv: +PI | Wenn y negativ: -PI phi(x_neg & ~y_neg) = PI - phi(x_neg & ~y_neg); phi(x_neg & y_neg) = phi(x_neg & y_neg) - PI; % 4. Quadrant: x ist positiv, aber y ist negativ phi(~x_neg & y_neg) = -phi(~x_neg & y_neg); end