using GeeVision.Core;
using UnityEngine;
public class FingerRotate
{
public int FingerRotateTrace(Hand_Info[] info)
{
int clockwise = 0; //顺时针
int anticlockwise = 0; //逆时针
int angleLast = 0;
int gestureIdn = 0;
for (int i = info.Length - 1; i > 0; i--)
{
Hand_Info pt0 = info[i];
Hand_Info pt1 = info[i - 1];
float a = pt1.Center3D.z - pt0.Center3D.z;
float b = pt1.Center3D.x - pt0.Center3D.x;
int angle = (int) (Mathf.Atan2(a, b)/Mathf.PI*180f);
angle = 180 - angle;
if (i > 0)
{
if (angle > angleLast)
{
anticlockwise = 0;
if ((angle > 0 && angle <= 90 && clockwise == 0)|| (angle > 0 && angle <= 90 && clockwise == 1))
{
clockwise = 1;
}
else if ((angle >= 90 && angle <= 180 && clockwise == 1)|| (angle >= 90 && angle <= 180 && clockwise == 2))
{
clockwise = 2;
}
else if ((angle >= 180 && angle <= 270 && clockwise == 2)|| (angle >= 180 && angle <= 270 && clockwise == 3))
{
clockwise = 3;
}
else if ((angle >= 270 && angle < 360 && clockwise == 3))
{
clockwise = 4;
break;
}
else
{
clockwise = 0;
}
}
if (angle < angleLast)// 逆时针
{
clockwise = 0;
if ((angle > 270 && angle < 360 && anticlockwise == 0)|| (angle > 270 && angle < 360 && anticlockwise == 1))
{
anticlockwise = 1;
}
else if ((angle >= 180 && angle <= 270 && anticlockwise == 1)|| (angle >= 180 && angle <= 270 && anticlockwise == 2))
{
anticlockwise = 2;
}
else if ((angle >= 90 && angle <= 180 && anticlockwise == 2)|| (angle >= 90 && angle <= 180 && anticlockwise == 3))
{
anticlockwise = 3;
}
else if (angle >= 0 && angle <= 90 && anticlockwise == 3)
{
anticlockwise = 4;
break;
}
else
{
anticlockwise = 0;
}
}
}
angleLast = angle;
}
if (clockwise == 4)
{
gestureIdn = 2;
}
else if (anticlockwise == 4)
{
gestureIdn = 1;
}
return gestureIdn;
}
}
判断一个物体在空间中是否为顺时针旋转
最新推荐文章于 2024-07-12 23:15:31 发布