private GestureDetector InitTrain(string name, bool isUseRel)
    {
        m_tagCount = Mathf.Max(m_skRecorder.m_tagList.ToArray());
        GestureDetector gd = new GestureDetector();

        gd.m_name             = name;
        gd.m_jointIdx         = (Joint[])m_jointIdx.Clone();
        gd.m_thresMulPerPost  = new float[m_tagCount];
        gd.m_thresMulPerJoint = new float[JointCount];

        PostureDetector[] pd = new PostureDetector[m_tagCount];
        gd.m_posts = pd;
        for (int i = 0; i < m_tagCount; i++)
        {
            gd.m_thresMulPerPost[i] = 1;
            pd[i]        = new PostureDetector();
            pd[i].m_name = name + '_' + (i + 1);

            JointMatcher[] jm = new JointMatcher[JointCount];
            pd[i].m_jointMatcher = jm;
            for (int j = 0; j < JointCount; j++)
            {
                if (i == 0 || !isUseRel)
                {
                    jm[j] = new JointMatcher();
                }
                else
                {
                    jm[j] = new JointMatcherR();
                    ((JointMatcherR)jm[j]).SetLastPostJoint(gd, i, j);
                }
                jm[j].m_jointIdx         = m_jointIdx[j];
                gd.m_thresMulPerJoint[j] = 1;
            }
        }

        return(gd);
    }
 public void SetLastPostJoint(GestureDetector gd, int postIdx, int jointIdx)
 {
     m_lastPostJoint = gd[postIdx - 1][jointIdx];
     m_gd            = gd;
     m_lastPostIdx   = postIdx - 1;
 }