<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Dieser Teil hat nichts mit dem Inhalt des Textes zu tun,Nur Präsentation</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Willkommen, um diesen Artikel zu lesen!"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># PHP verwenden atan2 Negativer Winkel während der Funktion,Wie sollte es richtig gehandhabt werden??</span></span><span>
existierenverwenden PHP Führen Sie zweidimensionale Graphenberechnungen durch、Wenn Sie Koordinaten ändern oder ein Spiel entwickeln,Wir müssen oft Winkel durch die Koordinaten von Punkten berechnen。PHP Eingebaut `atan2` Funktionen können bequem basierend auf **y koordinieren** Und **x koordinieren** Radianwert zurückgeben。Aber in praktischen Anwendungen,Viele Menschen werden auf ein gemeinsames Problem stoßen:**Der zurückgegebene Winkel kann negativ sein**。
</span><span><span class="hljs-comment">## 1. `atan2` Der Rückgabewertbereich</span></span><span>
existieren PHP Mitte,`</span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(y, x)` Der Rückgabewertbereich是:
</span></span>-π bis π (d. H. -180 ° bis 180 °)
<span><span>Das heisst,Wenn sich der Punkt im vierten Quadranten befindet,Der zurückgegebene Winkelwert ist negativ。Zum Beispiel:
```php
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$angle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$angle</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe ca. -0.785398163 (Im Augenblick -45°)</span></span><span>
</span></span>Mathematisch wird der Winkel gegen den Uhrzeigersinn aus der positiven Richtung der x-Achse als Ausgangspunkt berechnet. Aufgrund des Designs von AtAN2 ist der Winkel im vierten Quadranten natürlich negativ. Dies ist kein Fehler, sondern ein Merkmal der Funktion.
In vielen Anwendungsszenarien (z. B. Diagrammrotation, Navigation Zeigen) möchten wir, dass der Winkel einheitlich im Bereich von 0 bis 360 ° (0 bis 2π -Radian) liegt. Zu diesem Zeitpunkt können Sie die Bekehrung einfach durch Urteilsvermögen durchführen:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">atan2To360</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$y</span></span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>) {
</span><span><span class="hljs-variable">$angle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(</span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>); </span><span><span class="hljs-comment">// zurückkehren -π ankommen π</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$angle</span></span><span> < </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$angle</span></span><span> += </span><span><span class="hljs-number">2</span></span><span> * M_PI; </span><span><span class="hljs-comment">// 转换ankommen 0 ankommen 2π</span></span><span>
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$angle</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">atan2To360</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// Ungefähr ausgeben 5.497787143 (Im Augenblick 315°)</span></span><span>
</span></span>Wenn Sie es in einem Winkel darstellen müssen, können Sie die Rad2deg -Funktion kombinieren:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">atan2ToDegree360</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$y</span></span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>) {
</span><span><span class="hljs-variable">$angle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(</span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$angle</span></span><span> < </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$angle</span></span><span> += </span><span><span class="hljs-number">2</span></span><span> * M_PI;
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">rad2deg</span></span><span>(</span><span><span class="hljs-variable">$angle</span></span><span>); </span><span><span class="hljs-comment">// In Winkel konvertieren</span></span><span>
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">atan2ToDegree360</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// Ausgabe 315</span></span><span>
</span></span>Der von AtAN2 in PHP zurückgegebene Bereich beträgt [-π, π] .
Wenn ein negativer Winkel auftritt, ist er kein Fehler, sondern ein Funktionsmerkmal.
Wenn ein einheitlicher Bereich benötigt wird, können Sie 2π hinzufügen, um das Ergebnis in [0, 2π] umzuwandeln.
Wenn Sie ein Winkelsystem haben möchten, kombinieren Sie RAD2DEG und vereinen Sie es bei 0 ° ~ 360 ° .
Auf diese Weise kann die durch negative Winkel verursachte Verwirrung vermieden werden, und die tatsächlichen Bedürfnisse können besser an die Koordinierung von Berechnungen und Winkelanwendungen angepasst werden.