Итак, у меня есть система, которая содержит кластер позиций в позициях. Кластера хранится в массиве следующим образом:Вращение динамического трехмерного массива позиций
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-массив? Вы хотите повернуть отдельные элементы (где находятся координаты?) Или ограничивающий прямоугольник кластера (должен ли результат быть выровнен по оси?) –