<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie n'a rien à voir avec le contenu du texte,Présentation uniquement</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue à lire cet article!"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># PHP utiliser atan2 Angle négatif rencontré pendant la fonction,Comment doit-il être géré correctement?</span></span><span>
existerutiliser PHP Effectuer des calculs de graphiques bidimensionnels、Lorsque vous modifiez les coordonnées ou lors du développement d'un jeu,Nous devons souvent calculer les angles par les coordonnées des points。PHP Intégré `atan2` Les fonctions peuvent être commodément basées sur **y coordonner** et **x coordonner** Renter la valeur radian。Mais dans des applications pratiques,Beaucoup de gens rencontreront un problème commun:**L'angle retourné peut être négatif**。
</span><span><span class="hljs-comment">## 1. `atan2` La plage de valeur de retour</span></span><span>
exister PHP milieu,`</span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(y, x)` La plage de valeur de retour是:
</span></span>-π à π (c'est-à-dire -180 ° à 180 °)
<span><span>Cela signifie,Quand le point est dans le quatrième quadrant,La valeur d'angle renvoyé sera négative。Par exemple:
```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">// Sortie environ. -0.785398163 (Tout de suite -45°)</span></span><span>
</span></span>Mathématiquement, l'angle est calculé dans le sens antihoraire à partir de la direction positive de l'axe X comme point de départ. En raison de la conception d' ATAN2 , l'angle sera naturellement négatif dans le point du quatrième quadrant. Ce n'est pas une erreur, mais une caractéristique de la fonction.
Dans de nombreux scénarios d'application (tels que la rotation des graphiques, le pointage de navigation), nous voulons que l'angle soit uniformément dans la plage de 0 à 360 ° (0 à 2π radians) . Pour le moment, vous pouvez simplement effectuer la conversion par jugement:
<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">// retour -π arriver π</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">// 转换arriver 0 arriver 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">// Sortie approximativement 5.497787143 (Tout de suite 315°)</span></span><span>
</span></span>Si vous devez le représenter sous un angle, vous pouvez combiner la fonction RAD2DEG :
<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">// Convertir en angle</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">// Sortir 315</span></span><span>
</span></span>La plage renvoyée par ATAN2 en PHP est [-π, π] .
Si un angle négatif se produit, ce n'est pas une erreur, mais une caractéristique de fonction.
Lorsqu'une plage unifiée est nécessaire, vous pouvez ajouter 2π pour convertir le résultat en [0, 2π] .
Si vous voulez avoir un système d'angle, combinez Rad2deg et unifiez-le à 0 ° ~ 360 ° .
De cette façon, la confusion causée par des angles négatives peut être évitée, et les besoins réels peuvent être mieux adaptés pour coordonner les calculs et les applications d'angle.