Я разрабатываю программу для создания симулятора 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 квадрата вместе
На самом деле, если я поверну левую сторону и после верхней стороны, 2 из 4-х квадратов будут вращаться вместе, а 2 других, которые, где слева, прежде чем, кажется, вращаются по 2 осям