teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コード追加

2018/11/20 12:49

投稿

MOTOZOMBIE
MOTOZOMBIE

スコア13

title CHANGED
File without changes
body CHANGED
@@ -2,4 +2,48 @@
2
2
  自力で関数を書いてみましたが.あっている気がしないので関数が用意されているのなら使ってみたいです.
3
3
  **環境**
4
4
  - Opencv3.3
5
- - Visual Studio2015
5
+ - Visual Studio2015
6
+
7
+ このコードはOpenCVを使わず書いた関数です.
8
+ ```C++
9
+ #define deg_to_rad(deg) deg * M_PI / 180
10
+
11
+ struct matrix
12
+ {
13
+ double x;
14
+ double y;
15
+ double z;
16
+ };
17
+
18
+ inline matrix rotation_mat_x(matrix vec, double theta)
19
+ {
20
+ matrix vec_tmp;
21
+
22
+ vec_tmp.x = vec.x;
23
+ vec_tmp.y = vec.y * cos(deg_to_rad(theta)) + vec.z * -sin(deg_to_rad(theta));
24
+ vec_tmp.z = vec.y * sin(deg_to_rad(theta)) + vec.z * cos(deg_to_rad(theta));
25
+ return vec_tmp;
26
+ }
27
+
28
+ // y
29
+ inline matrix rotation_mat_y(matrix vec, double theta)
30
+ {
31
+ matrix vec_tmp;
32
+
33
+ vec_tmp.y = vec.y;
34
+ vec_tmp.x = vec.x * cos(deg_to_rad(theta)) + vec.z * -sin(deg_to_rad(theta));
35
+ vec_tmp.z = vec.x * sin(deg_to_rad(theta)) + vec.z * cos(deg_to_rad(theta));
36
+ return vec_tmp;
37
+ }
38
+
39
+ // z
40
+ inline matrix rotation_mat_z(matrix vec, double theta)
41
+ {
42
+ matrix vec_tmp;
43
+
44
+ vec_tmp.z = vec.z;
45
+ vec_tmp.x = vec.x * cos(deg_to_rad(theta)) + vec.y * -sin(deg_to_rad(theta));
46
+ vec_tmp.y = vec.x * sin(deg_to_rad(theta)) + vec.y * cos(deg_to_rad(theta));
47
+ return vec_tmp;
48
+ }
49
+ ```

1

文を追加

2018/11/20 12:49

投稿

MOTOZOMBIE
MOTOZOMBIE

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  3次元回転行列を用いて,Matに入ってる3*1行列を回転できるような関数は,OpenCVに存在していますか?
2
-
2
+ 自力で関数を書いてみましたが.あっている気がしないので関数が用意されているのなら使ってみたいです.
3
3
  **環境**
4
4
  - Opencv3.3
5
5
  - Visual Studio2015