Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

bade

struct Point3D

    {

        public float X, Y, Z;

        public Point3D (float x, float y, float z)

        {

            X=x;

            Y=y;

            Z=z;

        }

    }

    struct wireframe

    {

       public Point3D[] vert;

       public int[,] edge;

    }

    public partial class Form1 : Form

    {

        const int a = 100;

        Graphics g;

        wireframe w;

        int H, W;

     double al;

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            g = panel1.CreateGraphics();

            H = panel1.Height;

            W = panel1.Width;

            al = (float)30 * Math.PI / 180;

           w.vert= new Point3D [8];

            w.vert[0]=new Point3D(0,0,0);

            w.vert[1]=new Point3D(0,a,0);

            w.vert[2]=new Point3D(0,a,a);

            w.vert[3]=new Point3D(0,0,a);

            w.vert[4]=new Point3D(a,0,0);

            w.vert[5]=new Point3D(a,a,0);

            w.vert[6]=new Point3D(a,a,a);

            w.vert[7]=new Point3D(a,0,a);

            w.edge= new int [12,2];

            w.edge[0,0]=0;

             w.edge[0,1]=1;

             w.edge[1,0]=1;

             w.edge[1,1]=2;

             w.edge[2,0]=2;

             w.edge[2,1]=3;

             w.edge[3,0]=3;

             w.edge[3,1]=0;

             w.edge[4,0]=4;

             w.edge[4,1]=5;

             w.edge[5,0]=5;

             w.edge[5,1]=6;

             w.edge[6,0]=6;

             w.edge[6,1]=7;

             w.edge[7,0]=7;

             w.edge[7,1]=4;

             w.edge[8,0]=7;

             w.edge[8,1]=3;

             w.edge[9,0]=4;

             w.edge[9,1]=0;

             w.edge[10,0]=5;

             w.edge[10,1]=1;

             w.edge[11,0]=6;

             w.edge[11,1]=2;

        }

        PointF ChieuSSOXY(Point3D p)

        {

            PointF Q = new PointF();

            Q.X = p.X;

            Q.Y = p.Y;

            return Q;

        }

        void VeW(wireframe w, Graphics g, int W, int H, Color c)

        {

            Point3D p1, p2;

            PointF Q1, Q2;

            for (int i = 0; i < w.edge.GetLength(0); i++) 

            {

                p1 = w.vert[w.edge[i,0]];

                p2 = w.vert[w.edge[i,1]];

                Q1 = ChieuSSOXY(p1);

                Q2 = ChieuSSOXY(p2);

                Myline(g, W,H, Q1, Q2, c);

            }

        }

        void Myline(Graphics g, int W, int H, PointF p1, PointF p2, Color c)

        {

            p1.Y = H - p1.Y;

            p1.X += W;

            p2.Y = H - p2.Y;

            p2.X += W;

            g.DrawLine(new Pen(Color.Red), p1, p2);

        }

        private void panel1_Paint(object sender, PaintEventArgs e)

        {

            VeW(w, g,panel1.Width / 2, panel1.Height / 2, Color.Red);

        }

        Point3D XoayOx(Point3D p, float al)

        {

             Point3D q = new Point3D();

             q.X = p.X;

             q.Y =(float) (p.Y * Math.Cos(al) - p.Z*Math.Sin(al));

             q.Z = (float)(p.Y * Math.Sin(al) + p.Z * Math.Cos(al));

             return q;

                    }

        void XoayWOx(ref wireframe w, float al)

        {

            for (int i = 0; i < w.vert.Length; i++)

            {

                w.vert[i] = XoayOx(w.vert[i], al);

            }

        }

        Point3D XoayOy(Point3D p, float al)

        {

            Point3D q = new Point3D();

            q.Y = p.Y;

            q.X = (float)(p.Z * Math.Sin(al) + p.X * Math.Cos(al));

            q.Z = (float)(p.Z * Math.Cos(al) - p.X * Math.Sin(al));

            return q;

        }

        void XoayWOy(ref wireframe w, float al)

        {

            for (int i = 0; i < w.vert.Length; i++)

            {

                w.vert[i] = XoayOy(w.vert[i], al);

            }

        }

        Point3D XoayOz(Point3D p, float al)

        {

            Point3D q = new Point3D();

            q.Z = p.Z;

            q.Y = (float)(p.X * Math.Sin(al) + p.Y * Math.Cos(al));

            q.X = (float)(p.X * Math.Cos(al) - p.Y * Math.Sin(al));

            return q;

        }

        void XoayWOz(ref wireframe w, float al)

        {

            for (int i = 0; i < w.vert.Length; i++)

            {

                w.vert[i] = XoayOz(w.vert[i], al);

            }

        }

        Point3D BDOx(Point3D p, float hxy, float  hxz)

        {

            Point3D q = new Point3D();

            q.X = p.X + hxy * p.Y + hxz * p.Z;

            q.Y = p.Y;

                q.Z=p.Z;

            return q;

        }

        void BDWOx(ref wireframe w,float hxy, float hxz)

        {

            for (int i = 0; i < w.vert.Length; i++)

            {

                w.vert[i] = BDOx(w.vert[i], hxy, hxz);

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            XoayWOx(ref w,(float) al);

            g.Clear(panel1.BackColor);

                     VeW(w, g, panel1.Width / 2, panel1.Height / 2, Color.Red);

        }

        private void button2_Click(object sender, EventArgs e)

        {

            XoayWOy(ref w, (float)al);

            g.Clear(panel1.BackColor);

            VeW(w, g, panel1.Width / 2, panel1.Height / 2, Color.Red);

        }

        private void button3_Click(object sender, EventArgs e)

        {

            XoayWOz(ref w, (float)al);

            g.Clear(panel1.BackColor);

            VeW(w, g, panel1.Width / 2, panel1.Height / 2, Color.Red);

        }

        private void button4_Click(object sender, EventArgs e)

        {

            BDWOx(ref w, 2,3);

            g.Clear(panel1.BackColor);

            VeW(w, g, panel1.Width / 2, panel1.Height / 2, Color.Red);

        }}

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: