我已经在这些课上工作了一段时间了:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Kinect;
using System.Threading.Tasks;
using System.Windows.Media.Media3D;
namespace KinectFysioterapi
{
public class BoneVector
{
public Vector3D vector;
private double x;
private double y;
private double z;
#region Constructor
public BoneVector(Joint startJoint, Joint endJoint)
{
if (!(startJoint.Equals(endJoint)))
{
x = endJoint.Position.X - startJoint.Position.X;
y = endJoint.Position.Y - startJoint.Position.Y;
z = endJoint.Position.Z - startJoint.Position.Z;
vector = new Vector3D(x, y, z);
}
}
#endregion
}
public class SkeletonVectorCollection : Skeleton
{
public SkeletonVectorCollection(Skeleton input)
{
foreach (BoneOrientation orientation in input.BoneOrientations)
{
this[orientation.EndJoint] = new BoneVector(input.Joints[orientation.StartJoint], input.Joints[orientation.EndJoint]);
}
}
//Not sure how to do this correctly
public BoneVector this[JointType jointType]
{
get
{
return this[jointType];
}
protected set
{
this[jointType] = value;
}
}
}
}
我遇到了很大的问题,让最后一部分没有问题。
我正在寻找的是输入一个kinect骨架并获得一个新的骨架,其中包含关节之间某些已定义向量的附加信息。
我的目标是能够做到以下几点:
SkeletonVectorCollection collection = new SkeletonVectorCollection(skeleton);
skeleton[Jointtype.Head].vector.x.ToString();
我非常不确定如何正确使用此[JointType jointType]。
答案 0 :(得分:0)
根据定义,SkeletonVectorCollection
是递归的,因为this[JointType]
实现没有支持属性并且正在尝试存储到自身。如果您不需要/想要继承Skeleton
,则可以切换到Dictionary
并免费获得实施。
public class SkeletonVectorCollection : Dictionary<JointType, BoneVector>
{
public SkeletonVectorCollection(Skeleton input)
{
foreach (BoneOrientation orientation in input.BoneOrientations)
{
this[orientation.EndJoint] = new BoneVector(input.Joints[orientation.StartJoint], input.Joints[orientation.EndJoint]);
}
}
}
如果你必须从Skeleton
继承,那么你需要提供一个带有某种存储的实现,这里是一个在内部使用字典的版本。
public class SkeletonVectorCollection : Skeleton
{
private Dictionary<JointType, BoneVector> _boneVectors = new Dictionary<JointType, BoneVector>();
public SkeletonVectorCollection(Skeleton input)
{
foreach (BoneOrientation orientation in input.BoneOrientations)
{
this[orientation.EndJoint] = new BoneVector(input.Joints[orientation.StartJoint], input.Joints[orientation.EndJoint]);
}
}
public BoneVector this[JointType jointType]
{
get
{
return _boneVectors[jointType];
}
protected set
{
_boneVectors[jointType] = value;
}
}
}