Исключение понятно при обновлении позиций Kinect Joint

Я делаю очень простую вещь, моя цель - переместить один скелет в зависимости от положения другого скелета, для этого я основываюсь на позиции HipCenter. (Этот алгоритм может быть неправильным, этот вопрос касается исключения, возникающего в цикле foreach)

Вот мой фактический код:

public static Skeleton MoveTo(this Skeleton skOrigin, Skeleton skDestiny)
{
     Skeleton skReturn = skOrigin; // just making a copy

        // find the factor to move, based on the HipCenter.
        float whatToMultiplyX = skOrigin.Joints[JointType.HipCenter].Position.X / skDestiny.Joints[JointType.HipCenter].Position.X;
        float whatToMultiplyY = skOrigin.Joints[JointType.HipCenter].Position.Y / skDestiny.Joints[JointType.HipCenter].Position.Y;
        float whatToMultiplyZ = skOrigin.Joints[JointType.HipCenter].Position.Z / skDestiny.Joints[JointType.HipCenter].Position.Z;


        SkeletonPoint movedPosition = new SkeletonPoint();
        Joint movedJoint = new Joint();
        foreach (JointType item in Enum.GetValues(typeof(JointType)))
        {
            // Updating the position
            movedPosition.X = skOrigin.Joints[item].Position.X * whatToMultiplyX;
            movedPosition.Y = skOrigin.Joints[item].Position.Y * whatToMultiplyY;
            movedPosition.Z = skOrigin.Joints[item].Position.Z * whatToMultiplyZ;

            // Setting the updated position to the skeleton that will be returned.
            movedJoint.Position = movedPosition;
            skReturn.Joints[item] = movedJoint;
        }

        return skReturn;
    }

Использование F10 для отладки все работает нормально во втором проходе в цикле foreach. Когда я прохожу во второй раз в foreach, я получаю исключение в этой строке

skReturn.Joints[item] = movedJoint;

Исключение говорит:

JointType index value must match Joint.JointType 

Но на самом деле ценностью является Позвоночник.

Что случилось?


person Ewerton    schedule 24.11.2012    source источник
comment
Вы пытались просто сослаться на массив Joints по индексу? Завтра я попытаюсь раскрутить свой Kinect и протестировать цикл, чтобы посмотреть, смогу ли я воспроизвести его.   -  person Nicholas Pappas    schedule 25.11.2012
comment
спасибо, чувак, но не волнуйся, я найду решение и отредактирую свой вопрос позже. Спасибо, в любом случае   -  person Ewerton    schedule 25.11.2012
comment
Привет, Эвертон, не могли бы вы опубликовать свое решение? У меня такая же проблема в модульном тесте, который я хотел бы написать...   -  person Ingo    schedule 28.11.2012
comment
@ Инго смотри, извини за опоздание. Вот   -  person Ewerton    schedule 28.11.2012


Ответы (1)


Решено, вот решение

 Joint newJoint = new Joint(); // declare a new Joint

// Iterate in the 20 Joints
foreach (JointType item in Enum.GetValues(typeof(JointType)))
{
    newJoint = skToBeMoved.Joints[item];

            // applying the new values to the joint
            SkeletonPoint pos = new SkeletonPoint()
            {
                X = (float)(newJoint.Position.X + (someNumber)),
                Y = (float)(newJoint.Position.Y + (someNumber)),
                Z = (float)(newJoint.Position.Z + (someNumber))
            };

            newJoint.Position = pos;
            skToBeChanged.Joints[item] = newJoint;
        }

Это сработает.

person Ewerton    schedule 27.11.2012