Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }