public static Tetraeder AngleX(Tetraeder Tetr, float angle) { Tetraeder temp = new Tetraeder(Tetr); for (int i = 0; i < Tetr.arrP.Length; i++) { temp.arrP[i] = MatrixManager.OnAngleX(temp.arrP[i], angle); } return(temp); }
public static Cube AngleX(Cube cube, float angle) { Cube temp = new Cube(cube); for (int i = 0; i < cube.ArrF.Length; i++) { temp.ArrF[i] = MatrixManager.OnAngleX(temp.ArrF[i], angle); temp.ArrB[i] = MatrixManager.OnAngleX(temp.ArrB[i], angle); } return(temp); }
private void Rotate(object sender, EventArgs e, int value) { Point3D tempA = new Point3D(A); Point3D tempB = new Point3D(B); Point3D toStart = MatrixManager.PointsToStart(A, B); Cube tempCube = new Cube(cube); Tetraeder tempTet = new Tetraeder(tet); if (!toStart.Equals(new Point3D(0, 0, 0))) { tempA = MatrixManager.MoveOnVector(tempA, toStart.X, toStart.Y, toStart.Z); tempB = MatrixManager.MoveOnVector(tempB, toStart.X, toStart.Y, toStart.Z); if (isCube) { tempCube = Cube.MoveOnVector(tempCube, toStart.X, toStart.Y, toStart.Z); } else { tempTet = Tetraeder.MoveOnVector(tempTet, toStart.X, toStart.Y, toStart.Z); } } else { tempA = toStart; } //At this moment tempA is on 0,0,0 //B can be anywere //XY->angle to Z //XZ->angle to Y //YZ->angle to X if (tempB.X == 0 && tempB.Z == 0) { //Line is OY if (isCube) { tempCube = Cube.AngleY(tempCube, value); } else { tempTet = Tetraeder.AngleY(tempTet, value); } } else if (tempB.Y == 0 && tempB.Z == 0) { //Line is OX if (isCube) { tempCube = Cube.AngleX(tempCube, value); } else { tempTet = Tetraeder.AngleX(tempTet, value); } } else if (tempB.X == 0 && tempB.Y == 0) { //Line is OZ if (isCube) { tempCube = Cube.AngleZ(tempCube, value); } else { tempTet = Tetraeder.AngleZ(tempTet, value); } } else if (tempB.X != 0 && tempB.Y != 0 && tempB.Z != 0) { float angleX = (float)Math.Atan2(tempB.Y, tempB.Z) * 180 / (float)Math.PI; tempB = MatrixManager.OnAngleX(tempB, angleX); float angleY = (float)Math.Atan2(tempB.Z, tempB.X) * 180 / (float)Math.PI; if (isCube) { tempCube = Cube.AngleX(tempCube, angleX); tempCube = Cube.AngleY(tempCube, angleY); tempCube = Cube.AngleX(tempCube, value); tempCube = Cube.AngleY(tempCube, -angleY); tempCube = Cube.AngleX(tempCube, -angleX); } else { tempTet = Tetraeder.AngleX(tempTet, angleX); tempTet = Tetraeder.AngleY(tempTet, angleY); tempTet = Tetraeder.AngleX(tempTet, value); tempTet = Tetraeder.AngleY(tempTet, -angleY); tempTet = Tetraeder.AngleX(tempTet, -angleX); } } else if (tempB.X == 0) { float angleX = (float)Math.Atan2(tempB.Y, tempB.Z) * 180 / (float)Math.PI; if (isCube) { tempCube = Cube.AngleX(tempCube, angleX); tempCube = Cube.AngleZ(tempCube, value); tempCube = Cube.AngleX(tempCube, -angleX); } else { tempTet = Tetraeder.AngleX(tempTet, angleX); tempTet = Tetraeder.AngleZ(tempTet, value); tempTet = Tetraeder.AngleX(tempTet, -angleX); } } else if (tempB.Y == 0) { float angleY = (float)Math.Atan2(tempB.Z, tempB.X) * 180 / (float)Math.PI; if (isCube) { tempCube = Cube.AngleY(tempCube, angleY); tempCube = Cube.AngleZ(tempCube, value); tempCube = Cube.AngleY(tempCube, -angleY); } else { tempTet = Tetraeder.AngleY(tempTet, angleY); tempTet = Tetraeder.AngleZ(tempTet, value); tempTet = Tetraeder.AngleY(tempTet, -angleY); } } else if (tempB.Z == 0) { float angleZ = (float)Math.Atan2(tempB.Y, tempB.X) * 180 / (float)Math.PI; if (isCube) { tempCube = Cube.AngleZ(tempCube, angleZ); tempCube = Cube.AngleY(tempCube, value); tempCube = Cube.AngleZ(tempCube, -angleZ); } else { tempTet = Tetraeder.AngleZ(tempTet, angleZ); tempTet = Tetraeder.AngleY(tempTet, value); tempTet = Tetraeder.AngleZ(tempTet, -angleZ); } } if (isCube) { cube = Cube.MoveOnVector(tempCube, -toStart.X, -toStart.Y, -toStart.Z); } else { tet = Tetraeder.MoveOnVector(tempTet, -toStart.X, -toStart.Y, -toStart.Z); } panel1_Paint(sender, new PaintEventArgs(CreateGraphics(), panel1.DisplayRectangle)); }