我在一个项目中使用 Microsoft Kinect。我必须完成的任务之一是在 Kinect 传感器上找到用户的方向(当用户转动时,方向会改变)为此,我试图找到连接肩膀的线与Kinect 的 x 轴。
我想出了下面的代码,但它给了我非常小的角度值,即使我转动了大约 40 度。
double vector_x=skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_LEFT].x-skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_RIGHT].x;
double vector_y=skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_LEFT].y-skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_RIGHT].y;
double vector_z=skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_LEFT].z-skel.SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_RIGHT].z;
double len1=sqrtf(vector_x * vector_x + vector_y * vector_y + vector_z * vector_z);
double vector_x1=1.0;
double vector_y1=0.0;
double vector_z1=0.0;
double len2=sqrtf(vector_x1 * vector_x1 + vector_y1 * vector_y1 + vector_z1 * vector_z1);
double dot_product = vector_x * vector_x1 + vector_y * vector_y1 + vector_z * vector_z1;
double angle = dot_product / (len1 * len2);
coor_left=Convert(vector_x)+"\t"+Convert(vector_y)+"\t"+Convert(vector_z)+"\n";
OutputDebugStringA(Convert(acos(angle)).c_str());
当我添加弧度到度数的转换时,
double angle1=angle*180.0/3.14;
我得到从 -33 到 -57 的值(当我面对 Kinect 时),然后再到 -33。
但实际上,它应该是负数,然后是0,然后在另一边是正数。我哪里错了?