現在の位置: ホーム> 最新記事一覧> PHPがATAN2関数を使用するときに負の角度に遭遇する場合、どのように正しく処理する必要がありますか?

PHPがATAN2関数を使用するときに負の角度に遭遇する場合、どのように正しく処理する必要がありますか?

gitbox 2025-09-18
<span><span><span class="hljs-meta">&lt;?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">?&gt;</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">&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">// 出力概算 -0.785398163 (今すぐ -45°)</span></span><span>
</span></span>

2。なぜ否定的な角度があるのですか?

数学的には、角度はX軸の正方向から反時計回りに計算され、開始点として計算されます。 ATAN2の設計により、角度は4番目の象限のポイントで自然に負になります。これはエラーではなく、関数の機能です。

3.角度を0〜2πに変換する方法は?

多くのアプリケーションシナリオ(グラフ回転、ナビゲーションポインティングなど)では、角度を0〜360°(0〜2πラジアン)の範囲内で均一にする必要があります。この時点で、あなたは単に判断を通して回心をすることができます。

 <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">// 戻る -π 到着 π</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">// に変換します着 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>

4。角度システムに変換(0°から360°)

角度で表現する必要がある場合は、 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">// 角度に変換します</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>

5。概要

  • PHPでATAN2によって返される範囲は[-π、π]です。

  • 負の角度が発生した場合、それはエラーではなく、関数特性です。

  • 統一された範囲が必要な場合は、 を追加して結果を[0、2π]に変換できます。

  • 角度システムが必要な場合は、 rad2degを組み合わせて0°〜360°で統合します。

このようにして、負の角度によって引き起こされる混乱を回避することができ、実際のニーズは、計算と角度アプリケーションを調整するためによりよく適合させることができます。