나는 매우 간단한 작업을 수행하고 있습니다. 내 목표는 다른 골격의 위치를 기반으로 한 뼈대를 이동하는 것입니다.이 작업은 HipCenter 위치에 기반합니다. 모든 디버깅하는 F10를 사용업데이트에 대한 이해 Kinect 공동 위치
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;
}
테에서 두 번째 패스 ultin 잘 작동 :
여기내 실제 코드입니다 (이 알고리즘으로 잘못 될 수있다,이 문제는 foreach 루프에서 ocurring 예외에 관한 것입니다) foreach 루프. 내가 foreach 문에서 두 번째로 통과하고 때 나는이 라인 예외는 말한다
skReturn.Joints[item] = movedJoint;
에 예외가 :
JointType index value must match Joint.JointType
그러나 값이 actualy 척추입니다.
뭐가 잘못 되었나요?
해결
인덱스로 'Joints' 배열을 참조하려고 했습니까? 나는 내일 Kinect를 돌리면서 내가 그것을 재현 할 수 있는지 알아보기 위해 루프를 테스트하려고 노력할 것이다. –
감사합니다 남자,하지만 걱정하지 마세요, 나중에 해결책을 찾을 것입니다. 고맙습니다 어쨌든 – Ewerton
안녕하세요 Ewerton, 솔루션을 게시 해주십시오. 나는 내가 쓰고 싶은 단위 테스트에서 같은 문제를 겪고있다 ... – Ingo