2

WPF - C# で単一の座標を回転する必要があります。

x, y,zポイントで格納された値GeometryModel3D[]

たとえば、座標(x, y, z) は特定の軸で回転します。

[更新] クォータニオンを使用した回転変換。問題は、新しいベクトル値を取得できず、ポイント クラウドを表示すると、Meshlab で引きずり出されているように見えることです。

Matrix3D m = Matrix3D.Identity;
Quaternion q = new Quaternion(new Vector3D(320 / 2, y, maxDepth - minDepth), 90);
m.Rotate(q);
Vector3D myVectorToRotate = new Vector3D(((TranslateTransform3D)points[i].Transform).OffsetX,                        ((TranslateTransform3D)points[i].Transform).OffsetY,     ((TranslateTransform3D)points[i].Transform).OffsetZ);

m.Transform(myVectorToRotate);
pointcloud.Add(new Point3D(myVectorToRotate.X,myVectorToRotate.Y,myVectorToRotate.Z));

私はまだ正しい値の変換を取得できません。

kinect からスキャンした 2 番目の点群に回転変換を適用したいと考えています。1 回目のスキャン データはローテーションを含まないため、キャプチャ データと使用方法のコードは次のようになります。

for (int y = 0; y < 240; y += resolution)
{
    for (int x = 0; x < 320; x += resolution)
    {
        if (((TranslateTransform3D)points[i].Transform).OffsetZ >= minDepth
              && ((TranslateTransform3D)points[i].Transform).OffsetZ <= maxDepth)
        {
            pointcloud.Add(new Point3D(((TranslateTransform3D)points[i].Transform).OffsetX,                                                        ((TranslateTransform3D)points[i].Transform).OffsetY,                                              ((TranslateTransform3D)points[i].Transform).OffsetZ));
        }
        i++;
    }
}
4

1 に答える 1

2

あらゆる種類のマトリックスを作成します。たとえば、回転行列の場合は、静的メソッドVector.Multiply(...)を使用します。この投稿MSDN の一般的な変換の概要 も参照してください。

Vector3D の例:

  1. 3D 変換 WPF
  2. クォータニオンによるベクトルの回転

    Vector3D v = new Vector3D(1.0, -1.0, 2.0);
    ...
    AxisAngleRotation3D axisAngle = new AxisAngleRotation3D(axis, angle);
    RotateTransform3D myRotateTransform = new RotateTransform3D(axisAngle, centerVector);
    v.Multiply(myRotateTransform);
    
于 2013-01-21T20:47:39.997 に答える