Вращение кубика Рубика - может вращаться только в одном измерении за раз - PullRequest
0 голосов
/ 16 января 2020

В настоящее время я работаю над проектом по созданию кубика Рубика. Я пытаюсь быть в состоянии вращать куб. Сам куб состоит из 27 отдельных меньших кубов. Алгоритм, который я должен вращать, использует трехмерное вращение матрицы для каждого отдельного куба, чтобы найти его новую позицию, прежде чем обновлять угол поворота.

Пример алгоритма вращения вокруг оси z:

if (keyChar = #65) or (keyChar = #97) then
  begin
    for count := 1 to 27 do
      begin
        x := Cubes[count].Position.X;
        y := Cubes[count].Position.Y;
        newX := (cos(-pi/ANGLE)*x) - (sin(-pi/ANGLE)*y);
        newY := (sin(-pi/ANGLE)*x) + (cos(-pi/ANGLE)*y);
        Cubes[count].Position.X := newX;
        Cubes[count].Position.Y := newY;
        Cubes[count].RotationAngle.Z := Cubes[count].RotationAngle.Z - (180/ANGLE);
        Memo2.Lines.Clear;
        Memo2.Lines.Append(floatToStr(Cubes[14].RotationAngle.Z));
      end;
  end;

Этот алгоритм и алгоритмы поворота в других измерениях работают нормально только при вращении только в одном измерении. Однако, когда куб вращается в другом измерении, весь куб искажается. enter image description here

Я думаю, что ошибка связана с обновлением угла поворота куба, но я не уверен, как это исправить.

Заранее спасибо за любую помощь.

...