Пример #1
0
        private void button10_Click(object sender, EventArgs e)
        {
            penType = "3d";
            textBox1.Text = "U、I实现绕X轴旋转;H、J实现绕Y周旋转;K、L实现绕Z轴旋转;再次单击‘自由变换’停止转动";

            double a = 80;//边长为2a
            p1[0] = new point3(-a, -a, -a);
            p1[1] = new point3(a, -a, -a);
            p1[2] = new point3(a, a, -a);
            p1[3] = new point3(-a, a, -a);
            p1[4] = new point3(-a, -a, a);
            p1[5] = new point3(a, -a, a);
            p1[6] = new point3(a, a, a);
            p1[7] = new point3(-a, a, a);
            f1[0] = new face(4); f1[0].setedge(0, 0); f1[0].setedge(1, 3); f1[0].setedge(2, 2); f1[0].setedge(3, 1);//后面
            f1[1] = new face(4); f1[1].setedge(0, 4); f1[1].setedge(1, 5); f1[1].setedge(2, 6); f1[1].setedge(3, 7);//前面
            f1[2] = new face(4); f1[2].setedge(0, 0); f1[2].setedge(1, 4); f1[2].setedge(2, 7); f1[2].setedge(3, 3); //左面
            f1[3] = new face(4); f1[3].setedge(0, 1); f1[3].setedge(1, 2); f1[3].setedge(2, 6); f1[3].setedge(3, 5); //右面
            f1[4] = new face(4); f1[4].setedge(0, 3); f1[4].setedge(1, 7); f1[4].setedge(2, 6); f1[4].setedge(3, 2);//顶面
            f1[5] = new face(4); f1[5].setedge(0, 0); f1[5].setedge(1, 1); f1[5].setedge(2, 5); f1[5].setedge(3, 4); ;//底面

            for (int i = 0; i < p1.Length; i++)
            {
                p2[i] = new point3(p1[i].x, p1[i].y, p1[i].z);

            }
            //pictureBox1.Refresh();
            Graphics g = pictureBox1.CreateGraphics();
            drawc(g);
            
        }
Пример #2
0
 public void multiM()
 {
     point3[] pt2 = new point3[m_num];
     for (int i = 0; i < m_num; i++)
     {
         pt2[i] = new point3(pt[i].x, pt[i].y, pt[i].z);
     }
     for (int j = 0; j < m_num; j++)
     {
         pt[j].x = pt2[j].x * transM[0, 0] + pt2[j].y * transM[0, 1] + pt2[j].z * transM[0, 2] + pt2[j].w * transM[0, 3];
         pt[j].y = pt2[j].x * transM[1, 0] + pt2[j].y * transM[1, 1] + pt2[j].z * transM[1, 2] + pt2[j].w * transM[1, 3];
         pt[j].z = pt2[j].x * transM[2, 0] + pt2[j].y * transM[2, 1] + pt2[j].z * transM[2, 2] + pt2[j].w * transM[2, 3];
         pt[j].w = pt2[j].x * transM[3, 0] + pt2[j].y * transM[3, 1] + pt2[j].z * transM[3, 2] + pt2[j].w * transM[3, 3];
     }
 }
Пример #3
0
 public void rotateMZ(double angle, point3 p)
 {
     tranM(-p.x, -p.y, -p.z);
     rotateMZ(angle);
     tranM(p.x, p.y, p.z);
 }
Пример #4
0
 public void scaleM(double sx, double sy, double sz, point3 p)
 {
     tranM(-p.x, -p.y, -p.z);
     scaleM(sx, sy, sz);
     tranM(p.x, p.y, p.z);
 }
Пример #5
0
        //图形变换
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            //try
            //{
                if (penType == "2d")
                {
                    switch (e.KeyCode)
                    {
                        case Keys.S:
                            List<Point> p = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                p.Add(new Point(tranglePoints[i].X, tranglePoints[i].Y + 5));

                            }
                            tranglePoints = p;
                            button11_Click(sender, e);

                            break;
                        case Keys.D:
                            List<Point> pLeft = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pLeft.Add(new Point(tranglePoints[i].X + 5, tranglePoints[i].Y));

                            }
                            tranglePoints = pLeft;
                            button11_Click(sender, e);
                            break;
                        case Keys.W:
                            List<Point> pUp = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pUp.Add(new Point(tranglePoints[i].X, tranglePoints[i].Y - 5));

                            }
                            tranglePoints = pUp;
                            button11_Click(sender, e);

                            break;
                        case Keys.A:

                            List<Point> pRight = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pRight.Add(new Point(tranglePoints[i].X - 5, tranglePoints[i].Y));

                            }
                            tranglePoints = pRight;
                            button11_Click(sender, e);
                            break;

                        case Keys.Z:
                            List<Point> pClockwise = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pClockwise.Add(new Point((int)(tranglePoints[i].X * Math.Cos(Math.PI / 36) - tranglePoints[i].Y * Math.Sin(Math.PI / 36)), (int)(tranglePoints[i].X * Math.Sin(Math.PI / 36) + tranglePoints[i].Y * Math.Cos(Math.PI / 36))));
                            }
                            tranglePoints = pClockwise;
                            button11_Click(sender, e);
                            break;
                        case Keys.X:
                            List<Point> pCounterclockwise = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pCounterclockwise.Add(new Point((int)(tranglePoints[i].X * Math.Cos(-Math.PI / 36) - tranglePoints[i].Y * Math.Sin(-Math.PI / 36)), (int)(tranglePoints[i].X * Math.Sin(-Math.PI / 36) + tranglePoints[i].Y * Math.Cos(-Math.PI / 36))));
                            }
                            tranglePoints = pCounterclockwise;
                            button11_Click(sender, e);
                            break;
                        case Keys.V:
                            List<Point> pZoomin = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pZoomin.Add(new Point((int)(tranglePoints[i].X * 1.1), (int)(tranglePoints[i].Y * 1.1)));

                            }
                            tranglePoints = pZoomin;
                            button11_Click(sender, e);
                            break;
                        case Keys.B:
                            List<Point> pZoomout = new List<Point>();
                            for (int i = 0; i < tranglePoints.Count; i++)
                            {
                                pZoomout.Add(new Point((int)(tranglePoints[i].X * 0.9), (int)(tranglePoints[i].Y * 0.9)));

                            }
                            tranglePoints = pZoomout;
                            button11_Click(sender, e);
                            break;
                        default:
                            break;
                    }

                    Console.WriteLine();
                }

                if(penType=="3d")
                {
                    tr = new trans3(p2, p2.Length);
                    switch (e.KeyCode)
                    {
                        case Keys.U:
                            alf = -10;
                            tr.rotateMX(alf);
                            break;
                        case Keys.I:
                            alf = 10;
                            tr.rotateMX(alf);
                            break;
                        case Keys.H:
                            belta = -10;
                            tr.rotateMY(belta);
                            break;
                        case Keys.J:
                            belta = 10;
                            tr.rotateMY(belta);
                            break;
                        case Keys.K:
                            belta = -10;
                            tr.rotateMZ(belta);
                            break;
                        case Keys.L:
                            belta = 10;
                            tr.rotateMZ(belta);
                            break;
                        case Keys.R:
                            for (int i = 0; i < p1.Length; i++)
                            {
                                p2[i] = new point3(p1[i].x, p1[i].y, p1[i].z);
                            }
                            break;
                        default:
                            break;
                    }
                    pictureBox1.Refresh();
                    Graphics g = pictureBox1.CreateGraphics();
                    drawc(g);
                }
           // }
            //catch (Exception ec)
            //{

            //    MessageBox.Show(ec.Message, "超出画图边界!");
            //}
        }