【发布时间】: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吗?
-
已经看过了,但我收到了错误,因为将
GeometryModel3D从TranslateTransform3D更改为RotateTransform3D。
标签: c# wpf geometry kinect-sdk