私は Kinect 開発にかなり慣れていないので、Kinect ジョイントの回転を可能にするコンポーネントを構築しようとしています。これの目的は、キャプチャしたスケルトン データを手動で「修正」することです。キャプチャ後、スケルトンがジャンプし始めます。
らせんツールキットを使用して、Kinect スケルトンを 3D 空間に表示しています。任意の時点でスケルトン ストリームを一時停止し、BoneRotations オブジェクトに保持されている AbsoluteRotation と HierarchicalRotation のマトリックス値を確認できます。
X 軸、Y 軸、Z 軸を表す 3 つのスライダーを作成しました。最小/最大値を、操作するボーンの自然な動きに関連する値に設定しました (たとえば、Y 軸では、肩は約 40 度を超えて動きません)。肩 (右) の関節を例にとると、3D 空間でボーンの位置を変更できるように、各軸に回転を適用できるようにしたいと考えています。この種のアクションに関連する用語は順運動学だと思います。
私の質問は次のとおりです。
a) Kinect SDK は、関節の絶対的な階層マトリックスを提供します。操作するにはどれを見ればよいですか?
b) 四元数が与えて、行列が与えないものは何ですか?
c) 4x4 マトリックス情報を取得して、X 軸、Y 軸、Z 軸の角度 (度またはラジアン) を見つけるにはどうすればよいですか?
d) 次のような計算を使用して 3x3 行列を乗算して変換する方法を見てきました。
Matrix3X3 matrixx = new Matrix3X3();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
matrixx.elements[(i * 3) + j] = ((R2.elements[i * 3] * R1.elements[j]) + (R2.elements[(i * 3) + 1] * R1.elements[3 + j])) + (R2.elements[(i * 3) + 2] * R1.elements[6 + j]);
}
}
return matrixx;
Kinect SDK によって提供される 4x4 マトリックスを変換するにはどうすればよいですか?
より具体的には、各軸のスライダーを使用できるように、各軸の 4x4 マトリックスを変換できますか? では、X 軸に 10 度の回転を適用するにはどうすればよいでしょうか。次のように、3x3 マトリックスで回転が行われるのを見てきました。
public static Matrix3D NewRotateAroundX(double radians)
{
var matrix = new Matrix3D();
matrix._matrix[1, 1] = Math.Cos(radians);
matrix._matrix[1, 2] = Math.Sin(radians);
matrix._matrix[2, 1] = -(Math.Sin(radians));
matrix._matrix[2, 2] = Math.Cos(radians);
return matrix;
}
public static Matrix3D NewRotateAroundY(double radians)
{
var matrix = new Matrix3D();
matrix._matrix[0, 0] = Math.Cos(radians);
matrix._matrix[0, 2] = -(Math.Sin(radians));
matrix._matrix[2, 0] = Math.Sin(radians);
matrix._matrix[2, 2] = Math.Cos(radians);
return matrix;
}
public static Matrix3D NewRotateAroundZ(double radians)
{
var matrix = new Matrix3D();
matrix._matrix[0, 0] = Math.Cos(radians);
matrix._matrix[0, 1] = Math.Sin(radians);
matrix._matrix[1, 0] = -(Math.Sin(radians));
matrix._matrix[1, 1] = Math.Cos(radians);
return matrix;
}
事前に助けてくれてありがとう!