【问题标题】:Understanding CATransform3D rotations around all three axis了解 CATransform3D 围绕所有三个轴的旋转
【发布时间】:2013-02-28 17:33:11
【问题描述】:

我想以 3 个不同的角度围绕三个轴旋转视图:rx、ry、rz。

这是我所做的:

_tx = CATransform3DMakeRotation(rx*M_PI/360, 1, 0, 0);
_ty = CATransform3DMakeRotation(ry*M_PI/360, 0, 1, 0);
_tz = CATransform3DMakeRotation(rz*M_PI/360, 0, 0, 1);
view.layer.transform = CATransform3DConcat(_tx, CATransform3DConcat(_ty, _tz));

虽然当我尝试反转串联顺序时它正在工作。例如,

view.layer.transform = CATransform3DConcat(_tx, CATransform3DConcat(_ty, _tz));

view.layer.transform = CATransform3DConcat(_tz, CATransform3DConcat(_tx, _ty));

不要给出相同的结果!!

  1. 有没有办法用一个CATransform3DMakeRotation绕3轴旋转?
  2. 或者有更好的方法来做到这一点?

【问题讨论】:

  • 不确定this 是否有助于您理解转换。
  • 感谢链接,我会仔细阅读的。
  • 从度到弧度的转换 = 度 * M_PI / 180;

标签: ios macos catransform3d


【解决方案1】:

矩阵运算不可交换,更改它们相乘的顺序会得到不同的结果变换矩阵。

您希望按什么顺序应用 3 种不同的旋转?这就是您应该连接变换矩阵的顺序。

【讨论】:

  • 感谢您为我点亮。你是对的,我不知道它是不可交换的,因为我用一个真正的小立方体尝试了两个简单的旋转。我认为我有一个概念问题,因为我无法决定必须完成转换的顺序。让我尴尬的是我正在做 3 次变换而不是只进行一次变换。如果CATransform3DMakeRotation 中有 (x, y, z),应该有一种方法可以在一条指令中实现这一点,不是吗??
  • @Martin 你可以做view.layer.transform = CATransform3DMakeRotation(totalAngle, rx, ry, rz);,其中 rx+ry+rz = 1 并且 (rx, ry, rz) 是你正在旋转的向量。
  • 好吧,我开始明白了。我必须从我的 3 次变换中计算得到的向量和角度。也许您的链接会有所帮助。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2017-02-10
  • 2019-10-18
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多