3次元回転行列を用いて,Matに入ってる3*1行列を回転できるような関数は,OpenCVに存在していますか?
自力で関数を書いてみましたが.あっている気がしないので関数が用意されているのなら使ってみたいです.
環境
- Opencv3.3
- Visual Studio2015
このコードはOpenCVを使わず書いた関数です.
C++
1#define deg_to_rad(deg) deg * M_PI / 180 2 3struct matrix 4{ 5 double x; 6 double y; 7 double z; 8}; 9 10inline matrix rotation_mat_x(matrix vec, double theta) 11{ 12 matrix vec_tmp; 13 14 vec_tmp.x = vec.x; 15 vec_tmp.y = vec.y * cos(deg_to_rad(theta)) + vec.z * -sin(deg_to_rad(theta)); 16 vec_tmp.z = vec.y * sin(deg_to_rad(theta)) + vec.z * cos(deg_to_rad(theta)); 17 return vec_tmp; 18} 19 20// y 21inline matrix rotation_mat_y(matrix vec, double theta) 22{ 23 matrix vec_tmp; 24 25 vec_tmp.y = vec.y; 26 vec_tmp.x = vec.x * cos(deg_to_rad(theta)) + vec.z * -sin(deg_to_rad(theta)); 27 vec_tmp.z = vec.x * sin(deg_to_rad(theta)) + vec.z * cos(deg_to_rad(theta)); 28 return vec_tmp; 29} 30 31// z 32inline matrix rotation_mat_z(matrix vec, double theta) 33{ 34 matrix vec_tmp; 35 36 vec_tmp.z = vec.z; 37 vec_tmp.x = vec.x * cos(deg_to_rad(theta)) + vec.y * -sin(deg_to_rad(theta)); 38 vec_tmp.y = vec.x * sin(deg_to_rad(theta)) + vec.y * cos(deg_to_rad(theta)); 39 return vec_tmp; 40}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/20 13:23 編集
2018/11/20 14:54
2018/11/20 15:25 編集
2018/11/20 15:43
2018/11/20 15:49