2017.02.24
2024.12.10
象限(orthant)
象限とは
XとYの両方が正(プラス)の部分が第1象限、Xが負(マイナス)で、Yが正(プラス)の部分が第2象限、XとYの両方が負(マイナス)の部分が第3象限、Xが正(プラス)で、Yが負(マイナス)の部分が、第4象限となります。
Javaソースコード - 座標(x,y)の象限を求める
Orthant1.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 036 037 038 039 040 041 042 043 044 045 046
import java.util.Scanner; public class Orthant1 { // (x,y)が、どの象限なのかを1~4で戻します。 // (x,y)が、x軸またはy軸に有る場合、0を戻します。 private static int get_orthant( double x, double y ) { // 第1象限の判定 if ( ( 0.0 < x ) && ( 0.0 < y ) ) return 1; // 第2象限の判定 if ( ( 0.0 > x ) && ( 0.0 < y ) ) return 2; // 第3象限の判定 if ( ( 0.0 > x ) && ( 0.0 > y ) ) return 3; // 第4象限の判定 if ( ( 0.0 < x ) && ( 0.0 > y ) ) return 4; // x軸またはy軸 return 0; } // メイン public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // x座標の入力 System.out.println( "xを入力してください" ); double x = scan.nextDouble(); // y座標の入力 System.out.println( "yを入力してください" ); double y = scan.nextDouble(); // (x,y)から象限を求める int orthant = get_orthant( x, y ); // 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Orthant1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Orthant1.java
実行
C:\talavax\javasample>java Orthant1
実行例1
xを入力してください 4.0 yを入力してください 3.0 第1象限
実行例2
xを入力してください -3 yを入力してください 2 第2象限
実行例3
xを入力してください 0 yを入力してください -100 象限の取得に失敗しました。
x=0は、y軸の上なので象限の取得に失敗します。
ここから、ソースコードを順番に説明していきます。
001
import java.util.Scanner;
003
public class Orthant1 {
クラス名を、Orthant1としています。
004 005 006 007
// (x,y)が、どの象限なのかを1~4で戻します。 // (x,y)が、x軸またはy軸に有る場合、0を戻します。 private static int get_orthant( double x, double y ) {
008 009
// 第1象限の判定
if ( ( 0.0 < x ) && ( 0.0 < y ) ) return 1;
011 012
// 第2象限の判定
if ( ( 0.0 > x ) && ( 0.0 < y ) ) return 2;
014 015
// 第3象限の判定
if ( ( 0.0 > x ) && ( 0.0 > y ) ) return 3;
017 018
// 第4象限の判定
if ( ( 0.0 < x ) && ( 0.0 > y ) ) return 4;
020 021
// x軸またはy軸 return 0;
024 025
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
026 027
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
029 030 031
// x座標の入力 System.out.println( "xを入力してください" ); double x = scan.nextDouble();
x座標の入力部分です。
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数xに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数xに格納されます。
033 034 035
// y座標の入力 System.out.println( "yを入力してください" ); double y = scan.nextDouble();
y座標の入力部分です。
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数yに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数yに格納されます。
037 038
// (x,y)から象限を求める int orthant = get_orthant( x, y );
040 041 042 043 044
// 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" );
取得した結果をif文とprintln文を使ってコンソール出力しています。
取得した象限orthantが「0」であれば「象限の取得に失敗しました。」を出力し、「0」でなければ orthantに対応する「第1象限」「第2象限」「第3象限」「第4象限」のいずれかを出力しています。
Javaソースコード - x軸からの角度(整数)で象限を求める
Orthant2.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 036 037 038 039 040 041 042 043 044 045 046 047 048 049
import java.util.Scanner; public class Orthant2 { // 度単位の角度を指定して、象限1~4で戻します。 private static int get_orthant( int deg ) { // 角度を0~359の間に変換 // 360で割ったあまりを求める deg = deg % 360; // マイナスだったら360を足す if ( 0 > deg ) deg += 360; // x軸、y軸上の角度 if ( 0 == ( deg % 90 ) ) return 0; // 第1象限の判定 if ( 90 > deg ) return 1; // 第2象限の判定 if ( 180 > deg ) return 2; // 第3象限の判定 if ( 270 > deg ) return 3; // 第4象限の判定 return 4; } // メイン public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 角度の入力 System.out.println( "角度を度単位で入力してください" ); int deg = scan.nextInt(); // 角度degから象限を求める int orthant = get_orthant( deg ); // 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Orthant2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Orthant2.java
実行
C:\talavax\javasample>java Orthant2
実行例1
角度を度単位で入力してください 30 第1象限
実行例2
実行例3
角度を度単位で入力してください 90 象限の取得に失敗しました。
ここから、ソースコードを順番に説明していきます。
001
import java.util.Scanner;
003
public class Orthant2 {
クラス名を、Orthant2としています。
004 005 006
// 度単位の角度を指定して、象限1~4で戻します。 private static int get_orthant( int deg ) {
007 008 009 010 011 012 013
// 角度を0~359の間に変換 // 360で割ったあまりを求める deg = deg % 360; // マイナスだったら360を足す if ( 0 > deg ) deg += 360;
整数degを0~359の範囲に収める処理です。詳しくは以下の記事を参考にしてください。
015 016
// x軸、y軸上の角度
if ( 0 == ( deg % 90 ) ) return 0;
変数degが90の倍数かどうかを判定しています。
余りを求める演算子「%」を使って、変数degを90で割った余りを計算しています、計算結果が「0」の場合は x軸上またはy軸上なのでreturn文で「0」を戻しています。
018 019
// 第1象限の判定
if ( 90 > deg ) return 1;
第1象限の判定です。
degが90より小さい場合に、return文で「1」を戻してメソッドを抜けています。
この処理を行う時点で、degは0~359のいずれかの値に変換されていて、degはxy軸上の角度ではないので、degが90より小さい場合は「第1象限」と判定できます。
021 022
// 第2象限の判定
if ( 180 > deg ) return 2;
第2象限の判定です。
degが180より小さい場合に、return文で「2」を戻してメソッドを抜けています。
この処理を行う時点で、degが90より大きいので(180 > deg)だけで象限を判定しています。
024 025
// 第3象限の判定
if ( 270 > deg ) return 3;
第3象限の判定です。
degが270より小さい場合に、return文で「3」を戻してメソッドを抜けています。
この処理を行う時点で、degが180より大きいので(270 > deg)だけで象限を判定しています。
027 028
// 第4象限の判定 return 4;
第4象限の判定です。
この処理を行う時点で、degが270より大きいので「4」を戻しています。
031 032
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
033 034
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
036 037 038
// 角度の入力 System.out.println( "角度を度単位で入力してください" ); int deg = scan.nextInt();
角度の入力部分です。
nextIntメソッドで、キーボードから入力された1行を読み取り、その値をint型の変数degに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数degに格納されます。
040 041
// 角度degから象限を求める int orthant = get_orthant( deg );
043 044 045 046 047
// 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" );
取得した結果をif文とprintln文を使ってコンソール出力しています。
取得した象限orthantが「0」であれば「象限の取得に失敗しました。」を出力し、「0」でなければ orthantに対応する「第1象限」「第2象限」「第3象限」「第4象限」のいずれかを出力しています。
Javaソースコード - x軸からの角度(実数)で象限を求める
Orthant3.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 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050
import java.util.Scanner; public class Orthant3 { // 度単位の角度を指定して、象限1~4で戻します。 private static int get_orthant( double deg ) { // 角度を0~360未満の間に変換 // 360で割ったあまりを求める deg = deg % 360.0; // マイナスだったら360.0を足す if ( 0 > deg ) deg += 360.0; // x軸、y軸上の角度 double e = 0.000000000000001; if ( e > Math.abs( deg % 90.0 ) ) return 0; // 第1象限の判定 if ( 90.0 > deg ) return 1; // 第2象限の判定 if ( 180.0 > deg ) return 2; // 第3象限の判定 if ( 270.0 > deg ) return 3; // 第4象限の判定 return 4; } // メイン public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 角度の入力 System.out.println( "角度を度単位で入力してください" ); double deg = scan.nextDouble(); // 角度degから象限を求める int orthant = get_orthant( deg ); // 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Orthant3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Orthant3.java
実行
C:\talavax\javasample>java Orthant3
実行例1
角度を度単位で入力してください 127.3 第2象限
実行例2
実行例3
ここから、ソースコードを順番に説明していきます。
001
import java.util.Scanner;
003
public class Orthant3 {
クラス名を、Orthant3としています。
004 005 006
// 度単位の角度を指定して、象限1~4で戻します。 private static int get_orthant( double deg ) {
007 008 009 010 011 012 013
// 角度を0~360未満の間に変換 // 360で割ったあまりを求める deg = deg % 360.0; // マイナスだったら360.0を足す if ( 0 > deg ) deg += 360.0;
整数degを0~359.99999…の範囲に収める処理です。詳しくは以下の記事を参考にしてください。
015 016 017
// x軸、y軸上の角度 double e = 0.000000000000001; if ( e > Math.abs( deg % 90.0 ) ) return 0;
変数degが90の倍数かどうかを判定しています。
余りを求める演算子「%」を使って、変数degを90.0で割った余りを計算しています、計算結果の絶対値が変数eの値より小さい場合は x軸上またはy軸上なのでreturn文で「0」を戻しています。
Math.absメソッド
public static int Math.abs( int a ) public static long Math.abs( long a ) public static float Math.abs( float a ) public static double Math.abs( double a ) public static int Math.abs( byte a ) public static int Math.abs( short a )
・引数aに指定した数値の絶対値を返します。 パラメータ a : 絶対値を求めたい数値 戻り値 aの絶対値を返します。 戻りの変数型は、基本的に引数と同じ変数型と考えてよいです。
if ( 0.0 == ( deg % 90.0 ) ) return 0;
としていないのは、double型の値には誤差があるからです。計算結果が「0.0」にならずに「0.0」に近い値になることがあります。
ここでは「0.0」と判定してよい値を変数eを使って判定しています。
変数eの値は、任意の値に変えてもよいです。
double型の値の誤差については、以下の記事を参考にしてください。
019 020
// 第1象限の判定
if ( 90.0 > deg ) return 1;
第1象限の判定です。
degが90.0より小さい場合に、return文で「1」を戻してメソッドを抜けています。
この処理を行う時点で、degは0~359.99999…のいずれかの値に変換されていて、degはxy軸上の角度ではないので、degが90.0より小さい場合は「第1象限」と判定できます。
022 023
// 第2象限の判定
if ( 180.0 > deg ) return 2;
第2象限の判定です。
degが180.0より小さい場合に、return文で「2」を戻してメソッドを抜けています。
この処理を行う時点で、degが90.0より大きいので(180.0 > deg)だけで象限を判定しています。
025 026
// 第3象限の判定
if ( 270.0 > deg ) return 3;
第3象限の判定です。
degが270.0より小さい場合に、return文で「3」を戻してメソッドを抜けています。
この処理を行う時点で、degが180.0より大きいので(270.0 > deg)だけで象限を判定しています。
028 029
// 第4象限の判定 return 4;
第4象限の判定です。
この処理を行う時点で、degが270.0より大きいので「4」を戻しています。
032 033
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
034 035
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
037 038 039
// 角度の入力 System.out.println( "角度を度単位で入力してください" ); double deg = scan.nextDouble();
角度の入力部分です。
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数degに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数degに格納されます。
041 042
// 角度degから象限を求める int orthant = get_orthant( deg );
044 045 046 047 048
// 結果の出力 if ( 0 == orthant ) System.out.println( "象限の取得に失敗しました。" ); else System.out.println( "第" + orthant + "象限" );
取得した結果をif文とprintln文を使ってコンソール出力しています。
取得した象限orthantが「0」であれば「象限の取得に失敗しました。」を出力し、「0」でなければ orthantに対応する「第1象限」「第2象限」「第3象限」「第4象限」のいずれかを出力しています。
以上です。