Position actuelle: Accueil> Derniers articles> Lorsque PHP rencontre des angles négatifs lors de l'utilisation de la fonction ATAN2, comment doit-il être géré correctement?

Lorsque PHP rencontre des angles négatifs lors de l'utilisation de la fonction ATAN2, comment doit-il être géré correctement?

gitbox 2025-09-18
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie n&#39;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">?&gt;</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&#39;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&#39;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&#39;angle renvoyé sera négative。Par exemple:
```php
</span><span><span class="hljs-meta">&lt;?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>

2. Pourquoi y a-t-il des angles négatifs?

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.

3. Comment convertir les angles entre 0 et 2π?

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">&lt;?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> &lt; </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>

4. Convertir en système d'angle (0 ° à 360 °)

Si vous devez le représenter sous un angle, vous pouvez combiner la fonction RAD2DEG :

 <span><span><span class="hljs-meta">&lt;?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> &lt; </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>

5. Résumé

  • 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 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.