因此,我有一個系統,其中包含位置的項目羣集。簇按如下方式存儲在一個陣列中:旋轉位置的動態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陣列擁有什麼?你要旋轉分離項目(在哪裏座標?)或集羣的邊框(應其結果永遠軸對齊?) –