<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、テキストの内容とは何の関係もありません,プレゼンテーションのみ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事を読んでください!"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># PHP 使用 atan2 関数真ん中に遭遇する負の角度,どのように正しく処理する必要があります?</span></span><span>
使用真ん中 PHP 2次元グラフ計算を実行します、座標を変更するとき、またはゲームを開発するとき,多くの場合、ポイントの座標によって角度を計算する必要があります。PHP 組み込み `atan2` 関数は便利に基づいています **y 座標** そして **x 座標** ラジアン値を返します。しかし、実際のアプリケーションでは,多くの人々が一般的な問題に遭遇します:**返された角度は負になる可能性があります**。
</span><span><span class="hljs-comment">## 1. `atan2` 返品値の範囲</span></span><span>
存在する PHP 真ん中,`</span><span><span class="hljs-title function_ invoke__">atan2</span></span><span>(y, x)` 返品値の範囲是:
</span></span>-πからπ(すなわち-180°から180°)
<span><span>これはつまり,ポイントが4番目の象限にあるとき,返された角度値は負になります。例えば:
```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">// 出力概算 -0.785398163 (今すぐ -45°)</span></span><span>
</span></span>数学的には、角度はX軸の正方向から反時計回りに計算され、開始点として計算されます。 ATAN2の設計により、角度は4番目の象限のポイントで自然に負になります。これはエラーではなく、関数の機能です。
多くのアプリケーションシナリオ(グラフ回転、ナビゲーションポインティングなど)では、角度を0〜360°(0〜2πラジアン)の範囲内で均一にする必要があります。この時点で、あなたは単に判断を通して回心をすることができます。
<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">// 戻る -π 到着 π</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">// に変換します着 0 到着 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">// 約出力 5.497787143 (今すぐ 315°)</span></span><span>
</span></span>角度で表現する必要がある場合は、 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">// 角度に変換します</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">// 出力 315</span></span><span>
</span></span>PHPでATAN2によって返される範囲は[-π、π]です。
負の角度が発生した場合、それはエラーではなく、関数特性です。
統一された範囲が必要な場合は、 2πを追加して結果を[0、2π]に変換できます。
角度システムが必要な場合は、 rad2degを組み合わせて0°〜360°で統合します。
このようにして、負の角度によって引き起こされる混乱を回避することができ、実際のニーズは、計算と角度アプリケーションを調整するためによりよく適合させることができます。