Facebook
From Eratic Zebra, 5 Years ago, written in C#.
Embed
Download Paste or View Raw
Hits: 254
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace GrafikaLabki5
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         private System.Drawing.Pen pen1 = new System.Drawing.Pen(Color.Black, 1);
  16.         private System.Drawing.Pen pen2 = new System.Drawing.Pen(Color.Red, 1);
  17.         private System.Drawing.Pen pen3 = new System.Drawing.Pen(Color.Green, 1);
  18.         private System.Drawing.Brush br1 = new System.Drawing.SolidBrush(Color.Blue);
  19.  
  20.         public Form1()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.  
  25.         private void button1_Click(object sender, EventArgs e)
  26.         {
  27.             Bitmap bmp = new Bitmap( pictureBox1.Width, pictureBox1.Height );
  28.             Graphics gr = Graphics.FromImage( bmp );
  29.  
  30.             int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height;
  31.             Point p1 = new Point(), p2 = new Point(), p3 = new Point(), p4 = new Point(), q = new Point();          
  32.             int ile_pkt, tmp;
  33.  
  34.             int.TryParse(textBox1.Text, out tmp);
  35.             p1.X = tmp;
  36.             int.TryParse(textBox2.Text, out tmp);
  37.             p1.Y = tmp;
  38.             int.TryParse(textBox3.Text, out tmp);
  39.             p2.X = tmp;
  40.             int.TryParse(textBox4.Text, out tmp);
  41.             p2.Y = tmp;
  42.             int.TryParse(textBox5.Text, out tmp);
  43.             p3.X = tmp;
  44.             int.TryParse(textBox6.Text, out tmp);
  45.             p3.Y = tmp;
  46.             int.TryParse(textBox7.Text, out tmp);
  47.             p4.X = tmp;
  48.             int.TryParse(textBox8.Text, out tmp);
  49.             p4.Y = tmp;
  50.             int.TryParse(textBox9.Text, out ile_pkt);
  51.             Point[] points = new Point[ile_pkt];
  52.  
  53.             //Układ współrzędnych
  54.             gr.DrawLine(pen1, 0, srodekY, maxX, srodekY);
  55.             gr.DrawLine(pen1, srodekX, 0, srodekX, maxY);
  56.  
  57.             double t = 0;
  58.             for ( int i = 0; i < ile_pkt; i++ )
  59.             {
  60.                 q.X = (int)( Math.Pow( (1 - t), 3 )*p1.X + 3*t*( Math.Pow(( 1 - t ), 2))*p2.X + 3*Math.Pow(t,2)*(1-t)*p3.X + Math.Pow(t, 3)*p4.X );
  61.                 q.Y = (int)( Math.Pow(( 1 - t ), 3) * p1.Y + 3 * t * ( Math.Pow(( 1 - t ), 2) ) * p2.Y + 3 * Math.Pow(t, 2) * ( 1 - t ) * p3.Y + Math.Pow(t, 3) * p4.Y );
  62.  
  63.                 t += 1.0 / ile_pkt;
  64.                 points[i].X = srodekX + q.X;
  65.                 points[i].Y = srodekY - q.Y;
  66.             }
  67.  
  68.             gr.DrawLines(pen2, points); //Rysowanie Beizera
  69.  
  70.             //punkty
  71.             gr.FillEllipse(br1, srodekX + p1.X - 3, srodekY - p1.Y - 3, 6, 6);
  72.             gr.FillEllipse(br1, srodekX + p2.X - 3, srodekY - p2.Y - 3, 6, 6);
  73.             gr.FillEllipse(br1, srodekX + p3.X - 3, srodekY - p3.Y - 3, 6, 6);
  74.             gr.FillEllipse(br1, srodekX + p4.X - 3, srodekY - p4.Y - 3, 6, 6);
  75.  
  76.  
  77.             pictureBox1.Image = bmp;
  78.         }
  79.  
  80.         private void label9_Click(object sender, EventArgs e)
  81.         {
  82.  
  83.         }
  84.  
  85.         private void button2_Click(object sender, EventArgs e)
  86.         {
  87.             Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
  88.             Graphics gr = Graphics.FromImage(bmp);
  89.  
  90.             int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height;
  91.             Point q = new Point();
  92.             Point[] p = new Point[8];
  93.             int ile_pkt, tmp;
  94.  
  95.             int.TryParse(textBox1.Text, out tmp);
  96.             p[0].X = tmp;
  97.             int.TryParse(textBox2.Text, out tmp);
  98.             p[0].Y = tmp;
  99.             int.TryParse(textBox3.Text, out tmp);
  100.             p[1].X = tmp;
  101.             int.TryParse(textBox4.Text, out tmp);
  102.             p[1].Y = tmp;
  103.             int.TryParse(textBox5.Text, out tmp);
  104.             p[2].X = tmp;
  105.             int.TryParse(textBox6.Text, out tmp);
  106.             p[2].Y = tmp;
  107.             int.TryParse(textBox7.Text, out tmp);
  108.             p[3].X = tmp;
  109.             int.TryParse(textBox8.Text, out tmp);
  110.             p[3].Y = tmp;
  111.  
  112.             p[4].X = 80;
  113.             p[4].Y = -20;
  114.             p[5].X = 100;
  115.             p[5].Y = 20;
  116.             p[6].X = 120;
  117.             p[6].Y = -20;
  118.             p[7].X = 140;
  119.             p[7].Y = 20;
  120.  
  121.  
  122.             int.TryParse(textBox9.Text, out ile_pkt);
  123.  
  124.             Point[][] points;
  125.             points = new Point[5][];
  126.             for (int i = 0; i < 5; i++)
  127.                 points[i] = new Point[ile_pkt];    
  128.  
  129.             //Układ współrzędnych
  130.             gr.DrawLine(pen1, 0, srodekY, maxX, srodekY);
  131.             gr.DrawLine(pen1, srodekX, 0, srodekX, maxY);
  132.  
  133.             double t = 0;
  134.             for (int j = 3; j < 8; j++)
  135.             {
  136.                 t = 0;
  137.                 for (int i = 0; i < ile_pkt; i++)
  138.                 {
  139.                     q.X = (int)( Math.Pow((1-t),3)/6*p[j-3].X + (3*Math.Pow(t,3) - 6*Math.Pow(t,2) + 4)/6*p[j-2].X + (-3*Math.Pow(t, 3) + 3*Math.Pow(t, 2) + 3*t + 1)/6*p[j-1].X + Math.Pow(t, 3)/6*p[j].X);
  140.                     q.Y = (int)( Math.Pow(( 1 - t ), 3) / 6 * p[j - 3].Y + ( 3 * Math.Pow(t, 3) - 6 * Math.Pow(t, 2) + 4 ) / 6 * p[j - 2].Y + ( -3 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2) + 3 * t + 1 ) / 6 * p[j - 1].Y + Math.Pow(t, 3) / 6 * p[j].Y );
  141.  
  142.                     t += 1.0 / ile_pkt;
  143.                     points[j-3][i].X = srodekX + q.X;
  144.                     points[j-3][i].Y = srodekY - q.Y;
  145.                 }
  146.             }
  147.  
  148.             for (int i=0; i<5; i++)
  149.                 gr.DrawLines(pen2, points[i]); //Rysowanie Beizera
  150.  
  151.             //punkty
  152.             for (int i=0; i<8; i++)          
  153.                 gr.FillEllipse(br1, srodekX + p[i].X - 3, srodekY - p[i].Y - 3, 6, 6);
  154.  
  155.  
  156.             pictureBox1.Image = bmp;
  157.         }
  158.  
  159.         private void button3_Click(object sender, EventArgs e)
  160.         {
  161.             Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
  162.             Graphics gr = Graphics.FromImage(bmp);
  163.  
  164.             int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height;
  165.  
  166.             gr.DrawLine(pen1, 0, srodekY, maxX, srodekY);
  167.             gr.DrawLine(pen1, srodekX, 0, srodekX, maxY);
  168.  
  169.             Point p1 = new Point(), p2 = new Point(), p3 = new Point(), p4 = new Point(), q = new Point();
  170.             int tmp;
  171.             int.TryParse(textBox1.Text, out tmp);
  172.             p1.X = tmp;
  173.             int.TryParse(textBox2.Text, out tmp);
  174.             p1.Y = tmp;
  175.             int.TryParse(textBox3.Text, out tmp);
  176.             p2.X = tmp;
  177.             int.TryParse(textBox4.Text, out tmp);
  178.             p2.Y = tmp;
  179.             int.TryParse(textBox5.Text, out tmp);
  180.             p3.X = tmp;
  181.             int.TryParse(textBox6.Text, out tmp);
  182.             p3.Y = tmp;
  183.             int.TryParse(textBox7.Text, out tmp);
  184.             p4.X = tmp;
  185.             int.TryParse(textBox8.Text, out tmp);
  186.             p4.Y = tmp;
  187.  
  188.             //punkty
  189.             gr.FillEllipse(br1, srodekX + p1.X - 3, srodekY - p1.Y - 3, 6, 6);
  190.             gr.FillEllipse(br1, srodekX + p4.X - 3, srodekY - p4.Y - 3, 6, 6);
  191.  
  192.             //wektory
  193.             gr.DrawLine(pen3, srodekX + p1.X, srodekY - p1.Y, srodekX + p2.X + p1.X, srodekY - p2.Y - p1.Y);
  194.             gr.DrawLine(pen3, srodekX + p4.X, srodekY - p4.Y, srodekX + p3.X + p4.X, srodekY - p3.Y - p4.Y);
  195.  
  196.             double t = 0.0;
  197.             int ile_pkt;
  198.             int.TryParse(textBox9.Text, out ile_pkt);
  199.  
  200.             Point[] points = new Point[ile_pkt];
  201.  
  202.             for (int i = 0; i < ile_pkt; i++)
  203.             {
  204.                 q.X = (int)( ( 2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1 ) * p1.X +( -2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2) ) * p4.X + ( Math.Pow(t, 3) - 2 * Math.Pow(t, 2) + t ) * p2.X + ( Math.Pow(t, 3) - Math.Pow(t, 2) ) * p3.X );
  205.                 q.Y = (int)( ( 2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1 ) * p1.Y +( -2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2) ) * p4.Y + ( Math.Pow(t, 3) - 2 * Math.Pow(t, 2) +t ) * p2.Y + ( Math.Pow(t, 3) - Math.Pow(t, 2) ) * p3.Y );
  206.  
  207.                 points[i].X = srodekX + q.X;
  208.                 points[i].Y = srodekY - q.Y;
  209.  
  210.                 t += 1.0 / ile_pkt;
  211.             }
  212.  
  213.             gr.DrawLines(pen2, points);
  214.  
  215.             pictureBox1.Image = bmp;
  216.         }
  217.     }
  218. }
  219.