我开发了一个程序来制作Rubiks Cube 2x2x2的模拟器。 现在我必须开发旋转方式,它可以一个接一个地工作。
但是当我连续旋转2圈时,就会出现问题。
public void rotate() {
Matrix3d oldRot = new Matrix3d();
Vector3d oldPos = new Vector3d();
Transform3D tr = new Transform3D();
getTransform(tr);
tr.get(oldRot, oldPos);
matPos.transform(oldPos);
System.out.println("oldRot : ");
System.out.println(oldRot);
oldRot.mul(matRot);
setTransform(new Transform3D(oldRot, oldPos, 1));
}
public void setupRotation(char charAxis, double angle, double totalAngle) {
matPos = null;
matRot = null;
Vector3d currentAxis = new Vector3d();
if (charAxis == 'y') {
double sin = Math.sin(angle);
double cos = Math.cos(angle);
matPos = new Matrix3d(cos, 0, -sin, 0, 1, 0, sin, 0, cos);
currentAxis = ay;
} else if (charAxis == 'x') {
double sin = Math.sin(-angle);
double cos = Math.cos(-angle);
matPos = new Matrix3d(1, 0, 0, 0, cos, -sin, 0, sin, cos);
currentAxis = ax;
} else if (charAxis == 'z') {
double sin = Math.sin(-angle);
double cos = Math.cos(-angle);
matPos = new Matrix3d(cos, -sin, 0, sin, cos, 0, 0, 0, 1);
currentAxis = az;
}
AxisAngle4d axis = new AxisAngle4d(currentAxis.x, currentAxis.y,currentAxis.z, -angle);
Transform3D rot = new Transform3D();
rot.setRotation(axis);
matRot = new Matrix3d();
rot.get(matRot);
}
结果必须是一起旋转4个正方形
实际上,如果我旋转左侧,然后再旋转顶部,则4个正方形中的2个将一起旋转,而左侧之前的其他2个似乎在2轴上旋转