回答編集履歴

3

追記

2017/06/29 10:41

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

表記改善

2017/06/29 10:41

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,8 +1,8 @@
1
- sin/cos関数によって座標計算をするとどうしても誤差が出てしまいます。というのもこの関数の引数や結果は有理数とは限らないので計算機で正確な演算をすることは基本的に期待できません。
1
+ sincos関数によって座標計算をするとどうしても誤差が出てしまいます。というのもこの関数の引数や結果は有理数とは限らないので計算機で正確な演算をすることは基本的に期待できません。
2
2
 
3
3
 
4
4
 
5
- しかしながら90度(=π/2)に限定した回転ならば正確な演算結果とすることはできます。なぜなら数学的にπ/2の整数倍のsin/cosは-1,0,1のいずれかの値しかとらないからです。sin/cos関数を用いて誤差のある演算をするかわりに数学的定義に従い-1,0,1のいずれかの値を直接用いるようにすればよいのです。
5
+ しかしながら90度(=π/2)に限定した回転ならば正確な演算結果とすることはできます。なぜなら数学的にπ/2の整数倍のsincosは-1,0,1のいずれかの値しかとらないからです。sincos関数を用いて誤差のある演算をするかわりに数学的定義に従い-1,0,1のいずれかの値を直接用いるようにすればよいのです。
6
6
 
7
7
 
8
8
 

1

誤記訂正

2017/06/29 09:33

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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
  |...|...|...|