繁体   English   中英

如何通过角度 Vector3 旋转尺寸 Vector3?

[英]How to rotate a Vector3 of dimensions by a Vector3 of angles?

我有一个向量 3,它表示每个轴上一块网格中有多少块。 例如,如果这些向量之一是 (1, 2, 1),它将在 x 轴上长 1 个块,在 y 轴上长 2 个块,在 z 轴上长一个块。 我还有一个角度向量 3,表示沿每个轴的旋转。 例如,如果这些向量之一是 (90, 180, 0),则该块将围绕 x 轴旋转 90 度,围绕 y 轴旋转 180 度,围绕 z 轴旋转 0 度。 我想不通的是如何通过其旋转角度矢量来旋转一块的尺寸,所以我知道它占据了空间中的哪些点。

public class Block
{
    private Vector3 localOrientation;
    private Vector3 dimensions;

    public Vector3 GetRotatedDimensions()
    {
         //your implementation here
    }
}

如果我理解正确,那么您的问题存在根本性错误。 不能有“旋转尺寸”。 让我们用一个矩形来演示这一点。 (我没有正确理解)

假设有这个初始矩形:

初始矩形

然后你旋转它。 这就是你得到的:

旋转后的矩形

使用单个 Vector2,您无法区分“旋转的 x*y 矩形”和“初始 (x')*(y') 矩形”。 为了充分描述矩形的 position,您需要在块描述变量中保持大小和旋转。

x'y'是你想知道的吗? 我对此表示怀疑。 哦,你会吗? 伟大的!

在 3 个维度中,我会将您要查找的内容定义为

The minimum dimensions of a rectangular box that
1. has its faces parallel to the XY, XZ and YZ planes and
2. contains another rectangular box of known dimensions and orientation.

可能有更优雅的解决方案,但我会像这样强行使用它:

  1. 制作 8 个 Vector3 对象(块的每个顶点一个),
  2. 将它们全部绕 x 轴旋转。
  3. 围绕 y 轴旋转它们(你从“2”得到的新的)。
  4. 围绕 z 轴旋转它们(你从“3”得到的新的)。
  5. 找出所有点中 x、y 和 z 坐标的最小值和最大值。
  6. 您的新尺寸将是 (x_max-x_min)、(y_max-y_min)、(z_max-z_min)。

不过,我不是 100% 确定这一点,所以请确保您验证结果!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM