2016.02.21
角度の正規化
はじめに
以下がその変換例で、0~360°の範囲外の角度を0~360°の中に収めています。
変換例
角度 400°→ 40° 角度 720°→ 0° 角度 -50°→ 310°
角度を正規化するメソッド
それでは、メソッドの作り方を説明します。
角度の360°は一回転することなので、0°と360°とは同じ角度となります。よって、与えられた角度がプラス(0も含む)の場合、角度を360°で割った余りを求めることで角度を0~360°の範囲に収めることができます。また、角度がマイナスの場合は、360°で割った余りに360°を足すことで、角度を0~360°の範囲に収めることができます。
例えば、与えられた角度が400°の場合、400=360x1+40と書き直せるので40°となります。-50°場合、-50=360x0-50と書き直せます。さらに-50に360を足して310°となります。
正規化された角度 = 与えられた角度 % 360
正規化された角度 = 与えられた角度 % 360 + 360
Javaソースコード
Degrees.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035
public class Degrees { public static void main( String[] args ) { double deg; // 750° deg = 750.0; System.out.println( deg + "度 → " + getDegree( deg ) + "度" ); // 7200° deg = 7200.0; System.out.println( deg + "度 → " + getDegree( deg ) + "度" ); // -340° deg = -340.0; System.out.println( deg + "度 → " + getDegree( deg ) + "度" ); // -140° deg = -140.0; System.out.println( deg + "度 → " + getDegree( deg ) + "度" ); } // °単位の角度を0~360の範囲に収める private static double getDegree( double deg ) { // 360で割ったあまりを求める deg = deg % 360.0; // マイナスだったら360を足す if ( 0.0 > deg ) deg += 360.0; return deg; } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Degrees.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Degrees.java
実行
C:\talavax\javasample>java Degrees
実行結果
750.0度 → 30.0度 7200.0度 → 0.0度 -340.0度 → 20.0度 -140.0度 → 220.0度
計算された角度が、0~360°に収まっています。
以上です。