matlab - 通过平移和旋转从一个笛卡尔 3D 坐标系更改为另一个

标签 matlab math 3d geometry coordinate-transformation

我问这个问题有两个原因:

  • 我想知道我对这个问题的理解是否正确。
  • 为了澄清我的疑问。

  • 我想改变一组点的坐标系(旧笛卡尔坐标系到新笛卡尔坐标系)。这种转换将涉及平移和旋转。这是我打算做的:

    enter image description here

    关于这个图像,我有一组位于 XYZ 坐标系(红色)中的点。我想相对于轴 UVW(紫色)更改它。为了做到这一点,我了解到涉及两个步骤:平移和旋转。

    当我翻译时,我只改变原点。 (比如说,我希望 UVW 原点在 (5,6,7)。然后,对于我的数据中的所有点,x 坐标将减去 5,y 减去 6,z 减去 7。这样做。我获取一组翻译后的数据。)

    现在我必须应用旋转变换(在翻译数据上)。旋转矩阵如图所示。 Ux、Uy 和 Uz 值是 U 轴上与原点具有单位距离的点的坐标。类似地,值 Vx、Vy 和 Vz 是 V 轴上与原点具有单位距离的点的坐标。 (我想知道我是否在这里。)Wx, Wy, Wz 计算为 ((normalized u) X (normalised v))

    (此外,如果它有任何用途,我想让您知道我正在使用 MATLAB。)

    编辑:

    我在 3D(42 X 3 矩阵 A)中有一组 42 个点,我希望第一个点被视为 UVW 平面的原点。所以第一个点的值将是我的平移向量。正确的?

    接下来,计算旋转向量:根据我的要求,矩阵 A 的第 6 行必须是 U 轴,而第 37 行必须是 V 轴。因此,向量 u 将是矩阵 A 的(第 1 行减去第 6 行)。而向量 v 将是矩阵 A 的(第 1 行减去第 37 行)。

    旋转矩阵的第一行是向量 u/|u| (标准化)。第二行将是矢量 v/|v| (v 标准化)。第三行是 (u X v) .我就在这里吗?

    最佳答案

    Given this information, how can I calculate the value of Wx, Wy and Wx. How can I calculate the 3rd row of rotation matrix R?



    因为你已经有了 U 和 V,正交 UVW 系统的两个基向量,W 基向量将是 U 和 V 的叉积。叉积给出垂直于其操作数的向量;因此 W = U × V。 W 的分量将填充旋转矩阵的第三行。

    Is my approach correct?



    转换的顺序很重要;改变顺序会导致不同的结果。在进行系统变换时,通常首先处理缩放和旋转,最后处理平移。这样做的原因是旋转总是相对于原点。如果新系统不在旧系统的原点上,那么应用旋转将不会围绕它自己的原点而是围绕旧系统的原点旋转新系统。参见 this page 上图 3-4 的右侧案例了解如果不在原点上会发生什么差异;把锅想象成 UVW 坐标系。

    想想两个坐标系是叠加的(一个放在另一个上面)。现在,当您相对于 XYZ 的原点旋转 UVW 系统时,您最终会得到将 UVW 旋转到其自身原点的效果。一旦方向正确,您就可以对其应用翻译。但是,如果您已经平移,那么旋转将导致平移旋转。

    如果您使用列向量约定,那么 TR 将是顺序,即旋转后平移。如果您使用的是行向量约定,那么 RT 将是顺序,同样顺序是旋转后平移。

    关于matlab - 通过平移和旋转从一个笛卡尔 3D 坐标系更改为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285396/

    相关文章:

    wpf - 在 3D 对象 wpf 中放置一个控件

    matlab - 如何在不排序的情况下找到向量中 2 个最小元素的索引?

    arrays - 在一行中从多个数组创建结构

    matlab - 如何在 Matlab 中的二维扫描时间序列上应用移动中值滤波器?

    c++ - 从数列中减去一个数后,剩下的数中有多少是正数?

    c# - .NET 中的双倍乘法是否损坏?

    opengl - 半透明物体渲染顺序

    python - Pyplot 3d 散点图 : points at the back overlap points at the front

    matlab - MATLAB 中的矩阵索引错误

    c++ - 在 C/C++ 中使用 GSL 将多边形投影到平面上