Вращение не удалось в Java3D - PullRequest
0 голосов
/ 08 января 2019

Я разрабатываю программу для создания симулятора 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 осям

...