我需要在WPF中旋转单个坐标 - C#。
值x, y,z
存储在GeometryModel3D[]
点。
例如,坐标(x,y,z)在特定轴旋转。
[更新]使用四元数的旋转变换。问题是我没有得到新的矢量值,当我查看pointcloud时,它似乎在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++;
}
}
答案 0 :(得分:2)
创建任何类型的矩阵。例如rotation matrix,然后使用静态方法Vector.Multiply(...) 另请参阅this post和MSDN general transformation概述。
Vector3D的例子:
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);