因此,我有一个系统,其中包含位置的项目群集。簇按如下方式存储在一个阵列中:旋转位置的动态3D阵列
int[,,] = int[length, width, height];
根据群集的长度,宽度和高度都可能不同。如果我想用一组度(取值范围为0〜360)旋转整个集群:
double rX, double rZ, double rY
如何确定每个项目和出口的新数组中的新位置?
我破获的企图都开始像这样:
int iX = Math.Abs(rX/90), iZ = Math.Abs(rZ/90), iY = Math.Abs(rY/90);
if (iY == 1) // 90 or -90 degrees
{
group.Length = (rY/90) * back.Width;
group.Width = (rY/90) * back.Length;
}
else if (iY == 2) // 180 degrees
{
group.Length *= -1;
group.Width *= -1;
}
if (iZ == 1) // 90 or -90 degrees
{
group.Length = (rZ/90) * back.Height;
group.Height = (rZ/90) * back.Length;
}
else if (iZ == 2) // 180 degrees
{
group.Length *= -1;
group.Height *= -1;
}
if (iX == 1) // 90 or -90 degrees
{
group.Width = (rX/90) * back.Height;
group.Height = (rX/90) * back.Width;
}
else if (iX == 2) // 180 degrees
{
group.Width *= -1;
group.Height *= -1;
}
for(int gX = 0; gX < group.Length; gX++)
{
for (int gZ = 0; gZ < group.Width; gZ++)
{
for (int gY = 0; gY < group.Height; gY++)
{
//I lose track here.
}
}
}
从那里,我不知道哪里去了。 group
是我尝试旋转的群集,而back
是这些操作之前的group
的副本。此组中的数组是这样的:
Cluster.Items[,,]
而且它的大小设置为group
的尺寸。该阵列基于X(长度)Z(宽度)Y(高度)轴。
我猜测答案与矩阵和翻转某些轴有关。
我想说的最好的方法是使用[旋转矩阵](https://en.wikipedia.org/wiki/Rotation_matrix)(你已经标记了但可能不明白) – AntiHeadshot
“但可能不会理解” t理解“正确 –
我不明白你的数据结构。 3d阵列拥有什么?你要旋转分离项目(在哪里坐标?)或集群的边框(应其结果永远轴对齐?) –