Пример #1
0
    public TurnAroundTracker(int times, float angleTolerance)
    {
        m_turnAroundTimes = times;
        m_angleTolerance = angleTolerance;

        m_first = true;
        m_turningAngle = TurnAroundTracker.TurningAngle.Zero;
        m_prevTurningAngle = TurnAroundTracker.TurningAngle.Zero;
    }
Пример #2
0
    protected void TrackGesture()
    {
        Vector3 rightShoulderPos = NIConvertCoordinates.ConvertPos(m_jointRightShoulder.Position);
        Vector3 leftShoulderPos = NIConvertCoordinates.ConvertPos(m_jointLeftShoulder.Position);

        // shoulders
        Vector3 shouldersVect = rightShoulderPos - leftShoulderPos;

        if(m_first)
        {
            m_first = false;
            m_baseVector = shouldersVect; // take the vector at the begining for future measurement.
            return;
        }

        float turnedAngle = Vector3.Angle(shouldersVect.normalized, m_baseVector.normalized);

        if(Mathf.Abs(turnedAngle) < m_angleTolerance)
        {
            if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Third)
                m_turningAngle = TurnAroundTracker.TurningAngle.Full;
            else
                m_turningAngle = TurnAroundTracker.TurningAngle.Zero;
        }

        if((90 - Mathf.Abs(turnedAngle)) < m_angleTolerance)
        {
            if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Zero)
            {
                m_turningAngle = TurnAroundTracker.TurningAngle.Quater;

                if(m_jointRightShoulder.Position.Z > m_jointLeftShoulder.Position.Z)
                    m_ccDir = true;
                else
                    m_ccDir = false;
            }

            if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Half)
            {
                if(m_jointRightShoulder.Position.Z > m_jointLeftShoulder.Position.Z)
                {
                    if(m_ccDir)
                        m_turningAngle = TurnAroundTracker.TurningAngle.Quater;
                    else
                        m_turningAngle = TurnAroundTracker.TurningAngle.Third;
                }
                else
                {
                    if(m_ccDir)
                        m_turningAngle = TurnAroundTracker.TurningAngle.Third;
                    else
                        m_turningAngle = TurnAroundTracker.TurningAngle.Quater;
                }
            }
        }

        if(180 - Mathf.Abs(turnedAngle) < m_angleTolerance)
        {
            m_turningAngle = TurnAroundTracker.TurningAngle.Half;
        }

        m_prevTurningAngle = m_turningAngle;

        //Debug.Log("angle = " + turnedAngle + "state= " + m_turningAngle);
    }