• ベストアンサー

java 角度演算と表示

今船の航跡を数値化するプログラムをjavaで作っています。 船の場合北(上)を0degとして右回りに角度が増えていきます。 つまり東(右)が90deg 南(下)が180deg・・と右回りになってます。 しかしjavaのプログラムで計算するときは(x,y座標に表示するので)右が0rad 上がπ/2rad 左がπrad・・と左回りですよね? この場合どうやって針路を数学的なラジアン表示に変えればいいのでしょう? いい考えがあったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

船の角度は、 数学座標のx,y座標を入れ替えたもので考えるといいんじゃないですか x ↑ 0→y とすると、 数学的な角度の増え方(I象限II象限…)を 北から右回りに置き換えることができます。

p-aimar
質問者

お礼

なるほど! よくわかりました!ありがとうございます!

その他の回答 (1)

noname#17587
noname#17587
回答No.1

どの関数を指して左回りと言っているかわからないのですが 角度など相対的なものなので計算上どうにでも工夫できると思うのですが。。。 具体的にどの座標が求められないと言うのでしょうか?

p-aimar
質問者

お礼

ごめんなさい 質問してる本人もよくわかりません・・ ありがとうございました

関連するQ&A

  • 角度の起点

    数学で使う「角度」って「直交座標のXの+側」が起点で「左回り」になっていますが、なぜこの位置が起点になってるのでしょか? 時計は直交座標のYの+側が起点で右回りになってます。 これらの違いは、学問的なもの、生活習慣などからきてるのでしょうか…

  • どこがおかしいか教えてください。

    以下のようなプログラム(書きかけ)を実行したら、下の(実行結果)のようになりました。 rad=deg+1;って書いたのに実行するとradが30のままなのはなぜなのでしょうか??教えてください #include <stdio.h> main() { double deg,rad; printf("sin degの値を計算します。\n"); printf("deg(角度)を入力せよ。:"); scanf("%d", &deg); printf("deg=%d\n",deg); printf("sin %d を計算します。\n",deg); rad=deg+1; printf("degをrad表示すると %d\n", rad); return(0); } (実行結果) sin degの値を計算します。 deg(角度)を入力せよ。:30 deg=30 sin 30 を計算します。 degをrad表示すると 30 Press any key to continue

  • integerクラスとMathクラス

    適当な整数numをキーボードから入力し、その回数だけ0から360までの整数をランダムに発生させ、その整数を角度(弧度法)とみなしたとき、その正接(tan)が最大のとなる整数を表示するプログラム を以下の手順で下記に作成した結果、角度が同じ値になります。これはどうしてですか?また、手順通りのプログラムにするにはどのようなプログラムて適切ですか?     手順      (1)最大値となる角度を代入する整数型の変数maxを初期値-90で定義する。      (2)乱数を発生させる回数を入力する。      (3)0から360までの整数を、乱数を使って1つ発生させ、整数型の変数degに保存。この値を表       示する。      (4)角度degをラジアンに変換し、実数型の変数radに代入し、表示する。変換は             rad = deg * Math.PI/180.0 (Math.PIは円周率を表す)       で行なうことができる。ただし、実際のプログラムでは上式をそのまま書くのではなく、変数       の型に注意して記述すること。      (5)radを用いて正接(tan)を計算する。      (6)maxから計算されるtanの値と比較し、(4)の結果の方が大きければmaxをdegに書き換え       る。      (7)(2)から(5)を入力した回数になるまで繰り返す      (8)maxを表示する。import java.io.*; class Kakudo3 { public static void main(String args[]) throws IOException { int max = -90; System.out.println("整数を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num = Integer.parseInt(str1); int deg =(int)(Math.random()*360); for(int i=0; i<num; i++){ System.out.print(deg+","); } double rad = deg*Math.PI/180.0; Math.tan(rad); } }

    • ベストアンサー
    • Java
  • for文初期化で整数と実数を混在させると値が狂う

    C++ではfor文の初期化時にカウンタ変数等の宣言ができますよね. 0°から360°を表示するプログラムの例なのですが,次のコードを見てください. int main(void) { const double drad = 2 * M_PI / 6; double rad; rad = 0.0; for (int i = 0; i <= 6; i++, rad+= drad) { // cout << "rad: " << rad << endl; cout << "deg: " << rad * 180.0 / M_PI << endl; } } このプログラムを実行すると,0°から60°ごとに360°まで表示されました. ここで,for文の初期化処理でradの初期化を行おうとして, for (int i = 0, rad = 0.0; i <= 6; i++, rad+= drad) とプログラムを書き換えたところ,表示値は deg: 57.2958 deg: 114.592 deg: 171.887 deg: 229.183 deg: 286.479 deg: 343.775 となりました. また,コメントアウトしてある行を有効にしてradの中身を直接表示させると, rad: 0 rad: 1 rad: 2 rad: 3 rad: 4 rad: 5 rad: 6 といったように,radが整数値に丸められています. int iをfor文の外で宣言して for (i = 0, rad = 0.0; i <= 6; i++, rad+= drad) としたときには,正しい角度の表示が行われました. これは,for文の初期化時に変数宣言を行うとき,同時にほかの初期化処理を記述してしまったらその変数も同じ型の新しい変数として宣言されてしまうということなのでしょうか? for (int i = 0, rad = 0.0;... →int i と int rad がスコープ内の変数として新しく宣言される?

  • 座標平面上での角度(交角)の捉え方

    (1)座標平面上ではx軸の正方向を基準としてそこから左まわりを正、右まわりを負とすると考えてよろしいでしょうか? (2)座標平面上での角度(交角)を捉えるときに注意するべきことがわかりません。(独学中なので、教えてください) (3)具体的な問題では図の直線APとx軸の正方向のなす角の大きさを求めよ。 ただし、ベクトルAP,AQのなす角を5/6πとする。 (ベクトルのなす角は数B の内積の部分で扱いましたがこれも(1)のように、左まわりを正とするのかと思いましたが0≦θ≦πの範囲で考えるとあるだけでした。どう考えるのでしょうか?) 問題集の答えでは3/2πー5/6π=2/3πとあります。 僕は5/6πーπ/2=π/3として、πーπ/3=2π/3としましたがうえの(1)(2)のことがはっきり分かっていないので、確信が持てませんでした

  • 位置の計算式

    位置計算の質問です。 まったくの初心者で何から勉強していいのか わかりません。ご指導お願いします。 (1)と(2)の船があります。 (1)の位置からみた(2)の方位、速力、針路、速力を求める計算式 が知りたいのです。 以下の値を用いて、 ・(1)からの(2)の位置(東西座標[yd]) ・(1)からの(2)の位置(南北座標[yd]) ・(2)の速力(東西成分[kt]) ・(2)の速力(南北成分[kt]) 以下を求めたい ・(1)からの(2)の方位[deg] ・(1)からの(2)の距離[yd] ・(2)の針路[deg] ・(2)の速力[yd] 宜しくお願いいたします。

  • 右メニューの「右回りに回転」と「左回りに回転」について

    画像が入ったフォルダを「縮小版」で表示させ、右クリックすると「右回りに回転」と「左回りに回転」というメニューが出ます。 この「右回りに回転」と「左回りに回転」は画質的には問題無いのでしょうか?。 もしかしたら専用のソフトの方がきれいでしょうか?。 あまり画質にはこだわらないですが...気になったので..。 教えてください。

  • エクセル関数に変換(円の接線、角度)

    W=550,H=1000の図形があります。 左側の上から17下がった点から、右側の下から13.5上がった点を中心とした 半径17の円に対して接線(赤線)を引きます。 右側の線を延長した線と赤線の接点の角度はだすことができるのでしょうか? という質問をこちらでさせていただいたところ、 下記の数学の答えを教えていただきました。 しかし、これをもとにエクセル関数で 式を作らなければなりません。 この答えを参考に、エクセル関数で 角度θ=「」と出すために式を 作ることは可能でしょうか? ↓(数学の答え) まず次のmの方程式を解きます。 |550m - 986.5+17|/√(m^2 + 1) = 17 ⇔ 302211*m^2 - 1066450*m + 939641.25 =0 ⇔ m={533225 ±√358978821.3}/302211 =1.827106679, 1.701719208 (本問では前者が該当) 求める角度をαとすると、 tan(α)=1/m ゆえ、 α = arctan(1/m) =0.500778(rad) ですから、度数にして、 0.500778*(180/pi)=28.69247938(deg) です。

  • 矩形上で角度指定による座標の計算について

    矩形上で角度指定による座標の計算について困っています。 矩形の中心から角度を指定した場合の矩形線上の座標を求めたいのですが、 どのような計算で求められるか、どなたか助けていただける方がいらっしゃいましたらお願いします。 例えば、縦10、横7の長方形で、 中心から30度の座標位置 中心から120度の座標位置 中心から170度の座標位置 中心から250度の座標位置 等です。 0度の方向は中心からみて上、90度の方向は左、180度の方向は下、270度の方向は右です。 数学音痴ですので、やさしく教えていただければ幸いです。

  • 位置座標からx軸となす角度(ラジアンでも可)を求める方法

    簡単な2次元座標系で現在の位置が(x,y)だとします。 この点を三角関数を用いて表したときに x=m+r*cos a y=n+r*sin a となると思うんですが((m,n)は円の中心点,rは半径,aはx軸と半径のなす角とします)任意にa以外の変数に値を与えた場合,aを求めるプログラムの書き方が良く分かりません。 いいかえますと2点を結んだ直線とx軸とのなす角度を求めたいというものです。 もちろん角度ではなくラジアンでもかまいません。 どなたかご教授よろしくお願いします。

専門家に質問してみよう