【问题标题】:Rotating a 3D coordinate旋转 3D 坐标
【发布时间】:2013-01-21 20:37:16
【问题描述】:

我需要在 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 扫描的第二个点云应用旋转变换。由于第一次扫描数据不涉及旋转,因此捕获数据和使用的代码如下:

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++;
    }
}

【问题讨论】:

  • 例子是绕y轴旋转一个点90度?
  • 是的,但是我显示的代码似乎是错误的,因为我不知道如何设置矩阵..
  • [link]Matrix3D 结构(msdn.microsoft.com/en-us/library/…)
  • 你看过RotateTransform3D吗?
  • 已经看过了,但我收到了错误,因为将 GeometryModel3DTranslateTransform3D 更改为 RotateTransform3D

标签: c# wpf geometry kinect-sdk


【解决方案1】:

创建任何类型的矩阵。比如一个rotation matrix然后使用静态方法Vector.Multiply(...) 另请参阅 this postMSDN general transformation 概述。

Vector3D 示例:

  1. 3D transformation WPF
  2. Rotate a vector by quaternion

    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);
    

【讨论】:

  • 对不起,我还是不明白如何使用旋转矩阵来实现旋转。希望您可以通过简单的代码提供帮助:)。
  • @akuhero,你看过 Matthias 给出的 stackoverflow 链接了吗?那里有一个简单的代码示例
  • @sinelaw,我确实看过,但如何应用于 3D 矢量?
  • 这就是为什么我不能解决它。我不知道如何形成Matrix3D结构
  • 上面的链接是一个很好的起点。但我将编辑并添加更多指向 Vector3D 示例的链接。但是很酷,您投了反对票而不是提供答案。
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2012-03-06
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多