Facebook
From Subtle Bongo, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 221
  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 lab04grafika
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         private System.Drawing.Graphics g;
  16.         private System.Drawing.Pen pen = new System.Drawing.Pen(Color.Blue, 5);
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.             g = pictureBox1.CreateGraphics();
  21.         }
  22.  
  23.         private void button1_Click(object sender, EventArgs e)
  24.         {
  25.             double x1=100; //x P1
  26.             double x2=100;  //x R1
  27.             double x3=100;  //x R4
  28.             double x4=300; //x P4
  29.             double y1=100;
  30.             double y2=100;
  31.             double y3=100;
  32.             double y4=100;
  33.  
  34.             double prevX = x1;
  35.             double prevY = y1;
  36.             g.Clear(Color.White);
  37.  
  38.             for (double t=0.1;t<1.0;t+=0.1)
  39.             {
  40.                 double qX = (2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1) * x1 + (-2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2)) * x4 + (Math.Pow(t, 3) - 2 * Math.Pow(t, 2) + t) * x2 + (Math.Pow(t, 3) - Math.Pow(t, 2)) * x3;
  41.                 double qY = (2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1) * y1 + (-2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2)) * y4 + (Math.Pow(t, 3) - 2 * Math.Pow(t, 2) + t) * y2 + (Math.Pow(t, 3) - Math.Pow(t, 2)) * y3;
  42.              
  43.              
  44.                 g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY);
  45.                 prevX = qX;
  46.                 prevY = qY;
  47.  
  48.             }
  49.         }
  50.  
  51.         private void button2_Click(object sender, EventArgs e)
  52.         {
  53.             double x1 = 100; //x P1
  54.             double x2 = 200;  //x R1
  55.             double x3 = 300;  //x R4
  56.             double x4 = 400; //x P4
  57.             double y1 = 200;
  58.             double y2 = 100;
  59.             double y3 = 200;
  60.             double y4 = 100;
  61.  
  62.             double prevX = x1;
  63.             double prevY = y1;
  64.             g.Clear(Color.White);
  65.  
  66.             for (double t = 0; t < 1.0; t += 0.1)
  67.             {
  68.                 double tempT = (1 - t);
  69.                 double qX = (Math.Pow(tempT, 3) * x1) + (Math.Pow(tempT, 2) * 3 * t * x2) + (3 * t * t * tempT * x3) + (Math.Pow(t, 3) * x4);
  70.                 double qY = (Math.Pow(tempT, 3) * y1) + (Math.Pow(tempT, 2) * 3 * t * y2) + (3 * t * t * tempT * y3) + (Math.Pow(t, 3) * y4);
  71.  
  72.                 g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY);
  73.                 g.FillEllipse(new SolidBrush(Color.Black), (float)prevX-2.5f, (float)prevY-2.5f, 5f, 5f);
  74.                 prevX = qX;
  75.                 prevY = qY;
  76.             }
  77.         }
  78.  
  79.         private void button3_Click(object sender, EventArgs e)
  80.         {
  81.             g.Clear(Color.White);
  82.             double[,] tab = new double[,] { { 20, 20 }, { 20, 100 }, { 100, 20 }, { 100, 100 }, { 200, 20 }, { 200, 100 }, { 300, 20 }, { 300, 100 } };
  83.  
  84.             for (int i = 3; i < tab.GetLength(0); i++)
  85.             {
  86.                 double prevX = tab[i - 3, 0] * (1) / 6 + tab[i - 2, 0] * 4 / 6 + tab[i - 1, 0] * (1) / 6;
  87.                 double prevY = tab[i - 3, 1] * (1) / 6 + tab[i - 2, 1] * 4 / 6 + tab[i - 1, 1] * (1) / 6;
  88.  
  89.  
  90.                 for (double t = 0; t < 1.0; t += 0.1)
  91.                 {
  92.                     double qX = (tab[i - 3, 0] * Math.Pow((1 - t), 3) / 6) + (tab[i - 2, 0] * (3 * Math.Pow(t, 3) - 6 * Math.Pow(t, 2) + 4) / 6) + ((tab[i - 1, 0]) * (-3 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2) + 3 * t + 1) / 6)+(tab[i,0]*Math.Pow(t,3)/6);
  93.                     double qY = (tab[i - 3, 1] * Math.Pow((1 - t), 3) / 6) + (tab[i - 2, 1] * (3 * Math.Pow(t, 3) - 6 * Math.Pow(t, 2) + 4) / 6) + ((tab[i - 1, 1]) * (-3 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2) + 3 * t + 1) / 6) + (tab[i, 1] * Math.Pow(t, 3) / 6);
  94.                     g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY);
  95.                 }
  96.             }
  97.         }
  98.     }
  99. }
  100.