为什么魔方的立方体旋转会留下空的正方形?

时间:2019-01-03 07:25:28

标签: java matrix 3d processing

我正在使用Processing 3D开发Rubik Cube。在leftUp()函数中,我旋转左(蓝色)面,并相应地移动正方形。每个面孔都是一个阶级,每个正方形也是一个阶级。 问题是,当我在脸上调用rotateLeft函数时,某些正方形变为空。

我曾尝试使用图形转换对其进行调试,但发现每次旋转时,某些正方形会自行堆叠。 Correct orientation Erroneous orientation

这是显示面孔的代码:

void show()
{

 int count = 0;
 for( Square sq: squares)
 {
   pushMatrix();
   translate(translates[0]+count, translates[1], translates[2]);
   //count+=20;
   rotateX(angles[0]);
   rotateY(angles[1]);
   rotateZ(angles[2]);
   sq.show();
   popMatrix();
 }

}

广场表演的代码:

void show()
{
 pushMatrix();
 fill(colour[0],colour[1],colour[2]);
 beginShape();
 vertex(x1,y1);
 vertex(x2,y1);
 vertex(x2,y2);
 vertex(x1,y2);
 endShape(CLOSE);
 popMatrix();
}

leftUp和rotateTop的代码:

void leftUp()
{
  faces[2].rotateLeft(1);
  for(int i = 0; i < 3; i++)
  {
    Square temp = faces[3].squares[i*3];
    faces[3].squares[i*3] = faces[0].squares[i*3];
    faces[0].squares[i*3] = faces[5].squares[i*3];
    faces[5].squares[i*3] = faces[4].squares[i*3];
    faces[4].squares[i*3] = temp;
  }
}


void rotateTop()
{
  faces[3].rotateLeft(0);
  for(int i = 0; i < 3; i++)
  {
    Square temp = faces[1].squares[i];
    faces[1].squares[i] = faces[4].squares[i];
    faces[4].squares[i] = faces[2].squares[i];
    faces[2].squares[i] = faces[0].squares[i];
    faces[0].squares[i] = temp;
  }
}

Face的rotateLeft函数:

void rotateLeft(int temper)
{
 Square[] temp = new Square[9];
 for(int i = 0; i < 3; i++)
 {
   for(int j = 0; j < 3; j++)
   {
     temp[3*i+j] = squares[(2-i)*3+j];
     int[] tem = {i*100,0,0};
     //if(temper==1) temp[3*i+j].colour = tem; 
   }
 }

 for(int i = 0; i < temp.length; i++)
 {
   squares[i] = temp[i];
   println(faces[2].squares[i].colour);
 }


}

当我先致电leftUp,然后再致电rotateTop时,反之亦然。可能是什么问题?

问题多维数据集:

enter image description here

您可以看到左侧的底部底部缺少3个正方形。

0 个答案:

没有答案