2022.09.27
2025.03.04
Javaプログラミング
目次
円周上のランダムな座標を求める その3

角度θと半径rから(x,y)を求める
原点(ox,oy)を中心とした座標は、原点(0,0)で計算した座標(x,y)に(ox,oy)を足すことで求められます。(x+ox,y+oy)が求める座標です。
ここで紹介するソースコードでは、円の中心座標(ox,oy)と、固定した半径rの値と、角度θを乱数で発生させた値からランダムな円周上の座標を計算しています。
Javaソースコード - Math.random()メソッドを使用
PointOnCircle3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021
public class PointOnCircle3 { public static void main( String[] args ) { // 半径を指定 double radius = 100.0; // 円の中心座標を指定 double ox = 60.0; double oy = 40.0; // 乱数でラジアンを求める double rad = 2.0 * Math.PI * Math.random(); // 原点(ox,oy)、半径radiusの円周上の(x,y)を計算 double x = radius * Math.cos( rad ) + ox; double y = radius * Math.sin( rad ) + oy; // 結果を出力 System.out.println( "x=" + x ); System.out.println( "y=" + y ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis PointOnCircle3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac PointOnCircle3.java
実行
C:\talavax\javasample>java PointOnCircle3
出力結果(実行する毎に結果が変わります)
x=157.825195965776 y=19.257988664126067
Javaソースコードの解説
001
public class PointOnCircle3 {
クラス名を、PointOnCircle3としています。
002
public static void main( String[] args ) {
003 004
// 半径を指定 double radius = 100.0;
006 007 008
// 円の中心座標を指定 double ox = 60.0; double oy = 40.0;
010 011
// 乱数でラジアンを求める double rad = 2.0 * Math.PI * Math.random();
ラジアンを格納する変数radに、0.0~2πの範囲で発生する乱数を代入しています。
Math.PIは定数でπ(パイ)の値3.141592…です。
次に呼び出すMath.cosメソッドとMath.sinメソッドは、ラジアンの角度が引数なので、0.0~2πの乱数を発生しています。
013 014 015
// 原点(ox,oy)、半径radiusの円周上の(x,y)を計算 double x = radius * Math.cos( rad ) + ox; double y = radius * Math.sin( rad ) + oy;
半径radiusに、Math.cos( rad )を掛けた値に、円の中心x座標oxを足してx座標の値を計算しています。同様にMath.sin( rad )を掛けた値に、円の中心y座標oyを足してy座標の値を計算しています。
017 018 019
// 結果を出力 System.out.println( "x=" + x ); System.out.println( "y=" + y );
求めた座標(x,y)をprintlnメソッドでコンソール出力しています。
以上です。
Javaソースコード - Randomクラスを使用
以下は、Randomクラスを使用して乱数を生成するJavaソースコードです。
PointOnCircle3_2.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
import java.util.Random; public class PointOnCircle3_2 { public static void main( String[] args ) { // 半径を指定 double radius = 100.0; // 円の中心座標を指定 double ox = 60.0; double oy = 40.0; // Randomオブジェクトを生成 Random rand = new Random(); // 乱数でラジアンを求める double rad = 2.0 * Math.PI * rand.nextDouble(); // 原点(ox,oy)、半径radiusの円周上の(x,y)を計算 double x = radius * Math.cos( rad ) + ox; double y = radius * Math.sin( rad ) + oy; // 結果を出力 System.out.println( "x=" + x ); System.out.println( "y=" + y ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis PointOnCircle3_2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac PointOnCircle3_2.java
実行
C:\talavax\javasample>java PointOnCircle3_2
円周上の座標に関するコンテンツ
- 円の直径と半径
 - 有限小数と無限小数
 - 点が円内かを判定
 - 球の表面積/体積計算
 - 円の面積計算
 - 立方体の表面積/体積計算
 - 円周率πを計算で求める その1
 - 数学関数 三角関数 cos
 - 格子座標から円周率πを計算
 - 円周率πを計算で求める その2
 - 数学定数 円周率π(パイ)
 - 角度とラジアンの相互変換
 - 数学関数 三角関数 sin
 - 数学関数 三角関数 tan
 - tan(タンジェント)
 - 円周上のランダムな座標を求める その1
 - 円周上のランダムな座標を求める その2
 - 単位円
 - 変数について
 - 円弧の長さ
 - マルウェア
 - 数学関数 逆三角関数 acos
 - 数学関数 逆三角関数 asin
 - 数学関数 逆三角関数 atan
 - 数学関数 逆三角関数 atan2
 - 数学関数 逆三角関数 atan3
 - メソッド
 - 放射状模様
 - プログラミング言語
 - 実数と虚数
 - キーボード入力した角度のsin、cosを計算
 - 表面積
 - xy-座標の描画の実装
 - テーブルによる色変換 その1
 - コサイン(cos)グラフの表示
 - タンジェント(tan)グラフの表示
 - グラフの表示
 - 正三角形の面積計算
 - 三角関数表
 - 極座標系
 - 三角関数表の作成 その1
 - 三角関数表の作成 その2
 - 三角関数表の作成 その3
 
次に読んでほしいコンテンツ
円の中心座標(0,0)、半径rで表される円の円周上のランダムな座標を求めるJavaのソースコードを紹介しています。度単位の角度の乱数をラジアンに変換して座標を計算しています。
2022.09.27


