回答編集履歴

1

テキスト追加

2015/06/02 09:20

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -19,3 +19,123 @@
19
19
 
20
20
 
21
21
  以上ご参考になれば幸いです。
22
+
23
+
24
+
25
+ ---
26
+
27
+ 追記
28
+
29
+
30
+
31
+
32
+
33
+ Wikipediaの[三角関数の説明](http://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0)を使って説明します。
34
+
35
+
36
+
37
+ この説明の「定義」のすぐ下の右に
38
+
39
+
40
+
41
+ ∠Cを直角とする直角三角形ABC
42
+
43
+
44
+
45
+ の図があると思います。
46
+
47
+
48
+
49
+ この図で、点Aの座標を(x,y)とし、∠Aの角度をdeg(度)としますと、
50
+
51
+ 求めたいのは点Bの座標ですが、図にある三角形の辺の長さ、a と bを
52
+
53
+ 使うと、
54
+
55
+
56
+
57
+ B(x+b, y+a)
58
+
59
+
60
+
61
+ となりますので、あとは、aとbをlength(図では h )とdegを使って
62
+
63
+ 置き換えればよいことになります。
64
+
65
+
66
+
67
+ 図だと、∠Aの大きさをθとして
68
+
69
+
70
+
71
+ a = h × sin θ
72
+
73
+
74
+
75
+ b = h × cos θ
76
+
77
+
78
+
79
+ となっていますが、これをjavaのプログラムに直すときに、ちょっと気をつけ
80
+
81
+ なければならないのが、javaのサイン、コサインを求めるメソッド
82
+
83
+
84
+
85
+  Math.sin(angle)
86
+
87
+
88
+
89
+  Math.cos(angle)
90
+
91
+
92
+
93
+ は、角度の引数angleをラジアンで与えなければなりません。
94
+
95
+ 度(deg)をラジアン(rad)に変換するには、
96
+
97
+
98
+
99
+ rad = deg * Math.PI / 180;
100
+
101
+
102
+
103
+ ですが、Mathクラスには
104
+
105
+
106
+
107
+ Math.toRadians
108
+
109
+
110
+
111
+ という便利なメソッドがあるのでこれを使いますと、
112
+
113
+
114
+
115
+
116
+
117
+ b = length * Math.cos(Math.toRadians(deg));
118
+
119
+
120
+
121
+ a = length * Math.sin(Math.toRadians(deg));
122
+
123
+
124
+
125
+
126
+
127
+ となり、これらに、それぞれ移動前の座標(x,y)を
128
+
129
+ 加えると、求めたい
130
+
131
+
132
+
133
+ B(x+b, y+a)
134
+
135
+
136
+
137
+ の座標が得られます。
138
+
139
+
140
+
141
+ 以上です。