如何在 4 个维度上旋转?

How to rotate in 4 dimensions?

我正在尝试为游戏实现 4D 网格。但是,我发现了一个小问题,我不知道如何在 4 维中旋转东西 space。

我浏览了 Internet 并找到了以下 2 维:

以及以下 3 维:

但是,当我在 4D 中搜索内容时,我没有找到对显示要执行的确切转换的矩阵有很好答案的人。

我正在编写的代码是用 C# 编写的,但是我的目标是让这个 post 对每个人都有用,所以我不会 post 这里有任何代码(也因为我没有实际的旋转代码现在)。

点(顶点)当前表示为 4 个浮点值 (x,y,z,w)。 旋转可以用任何你喜欢的方式表示。

如果有人对某些矩阵或其他方式有很好的解释,谢谢!!

就地旋转意味着您修改矩阵本身,而不创建新矩阵。 但是,如果你旋转 90 度,你当然只能在矩阵是正方形的情况下就地旋转。 但是,如果旋转 180 度,则始终可以原地旋转。让我们取一个非方阵:

{ a, b, c, d, e, f },
{ g, h ,i, j, k, l },
{ m, n, o, p, q, r }

如果我们将它旋转 180 度,我们最终得到:

{ r, q, p, o, n, m },
{ l, k, j, i, h, g },
{ f, e, d, c, b, a }

您可以看到位于 [r, c] 的项目最终位于 [#rows - r - 1, #columns - c - 1]。 (当然是基于 0 的),所以 [0, 1] 处的 b 最终在 [3 - 0 - 1, 6 - 1 - 1]

可以使用的方法是:先交换a和r,再交换b和q,以此类推。 这类似于反转 1 维数组,只是在 2 维中。 就像在反转一维数组时一样,我们只进行了一半: 我们交换的最后两个项目是 i 和 j。 我使该方法通用,因此您可以用它旋转任何矩阵。

static void Rotate180<T>(T[,] matrix) {
    int rowCount = matrix.GetLength(0), columnCount = matrix.GetLength(1);
    int max = rowCount * columnCount / 2, m = 0;
    for (int r = 0; ; ++r) {
        for (int c = 0; c < columnCount; ++c) {
            Swap(matrix, r, c, rowCount - r - 1, columnCount - c - 1);
            if (++m >= max) return;
        }
    }
}

static void Swap<T>(T[,] matrix, int r1, int c1, int r2, int c2) {
    T temp = matrix[r1, c1];
    matrix[r1, c1] = matrix[r2, c2];
    matrix[r2, c2] = temp;
}

好吧,回答并获得赏金的人错了,我不想旋转 180 度 -_-。 90 怎么样,45 怎么样,69.420 或 3.432434 怎么样?我们也需要知道这一点。

所以我昨天确实自己弄明白了。你只是select一个平面,比如xy 这意味着 zw 坐标将改变。现在使用 2D 矩阵旋转这些点。 每个轴都这样做,总共6个可以绕每个轴旋转。

我想你的意思是如何旋转在齐次坐标(具有 4 个值)中定义的点。这是按如下方式完成的:

您用零和一填充常规 3×3 旋转矩阵 R 以获得 4×4 旋转矩阵。

如果您想在旋转之前将翻译与 (dx,dy,dz) 组合,则将翻译矢量添加到最后一列

上面用常规的3×1向量展开如下