Exemple #1
0
        public static PronationSupination CalculatePronationSupination(TransformMatrix RCS, TransformMatrix UCS, TransformMatrix BoneRelMation)
        {
            TransformMatrix relativeCSMotion = UCS.Inverse() * BoneRelMation * RCS;

            double[]            euler  = relativeCSMotion.ToEuler();
            PronationSupination result = new PronationSupination();

            result.Euler_x = euler[0];
            result.Euler_y = euler[1];
            result.Euler_z = euler[2];
            double pronationAngle = euler[0] - NEUTRAL_PS_POSITION; //correct for offset

            //correct for negative angles, want final wrist position to be [-180 180]
            while (pronationAngle < -180)
            {
                pronationAngle += 360;
            }
            result.PronationAngle = pronationAngle;
            return(result);
        }
Exemple #2
0
        public static PronationSupination[] CalculatePosturesPS(Bone radius, Bone ulna)
        {
            //First check if we have enough
            if (!radius.IsValidBone || !radius.HasInertia ||
                !ulna.IsValidBone || !ulna.HasInertia)
            {
                return(null);
            }

            //Lets create an array for the number of postures...
            int numPositions = radius.TransformMatrices.Length;

            PronationSupination[] postures = new PronationSupination[numPositions];

            for (int i = 0; i < numPositions; i++)
            {
                postures[i] = CalculatePronationSupination(radius.InertiaMatrix, ulna.InertiaMatrix,
                                                           radius.TransformMatrices[i], ulna.TransformMatrices[i]);
            }
            return(postures);
        }