回答編集履歴
3
追記
test
CHANGED
@@ -19,3 +19,41 @@
|
|
19
19
|
|3/2 π|-1|0|
|
20
20
|
|
21
21
|
|...|...|...|
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
---
|
26
|
+
|
27
|
+
追記:直角限定でのsinとcosの定義をよりはっきりさせる意味合いで、ご質問のコード中にあるrot_numを用いた関数の定義例を挙げておきます。ネーミングは直角のことをright angleというらしいのでra_sin, ra_cosとしてみました。
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
```C
|
32
|
+
|
33
|
+
static int ra_sine_table[] = { 0, 1, 0, -1 };
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
int ra_sin(int rot_num) {
|
38
|
+
|
39
|
+
rot_num %= 4;
|
40
|
+
|
41
|
+
// 負の数の場合の配慮
|
42
|
+
|
43
|
+
rot_num = (rot_num + 4) % 4;
|
44
|
+
|
45
|
+
return ra_sine_table[rot_num];
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
int ra_cos(int rot_num) {
|
52
|
+
|
53
|
+
return ra_sin(rot_num + 1);
|
54
|
+
|
55
|
+
}
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
|
2
表記改善
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
sin
|
1
|
+
sinやcos関数によって座標計算をするとどうしても誤差が出てしまいます。というのもこの関数の引数や結果は有理数とは限らないので計算機で正確な演算をすることは基本的に期待できません。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
しかしながら90度(=π/2)に限定した回転ならば正確な演算結果とすることはできます。なぜなら数学的にπ/2の整数倍のsin
|
5
|
+
しかしながら90度(=π/2)に限定した回転ならば正確な演算結果とすることはできます。なぜなら数学的にπ/2の整数倍のsinやcosは-1,0,1のいずれかの値しかとらないからです。sinやcos関数を用いて誤差のある演算をするかわりに数学的定義に従い-1,0,1のいずれかの値を直接用いるようにすればよいのです。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
誤記訂正
test
CHANGED
@@ -12,10 +12,10 @@
|
|
12
12
|
|
13
13
|
|0|0|1|
|
14
14
|
|
15
|
-
|1/2π|1|0|
|
15
|
+
|1/2 π|1|0|
|
16
16
|
|
17
17
|
|π|0|-1|
|
18
18
|
|
19
|
-
|3/2π|-1|0|
|
19
|
+
|3/2 π|-1|0|
|
20
20
|
|
21
21
|
|...|...|...|
|