using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace lab04grafika { public partial class Form1 : Form { private System.Drawing.Graphics g; private System.Drawing.Pen pen = new System.Drawing.Pen(Color.Blue, 5); public Form1() { InitializeComponent(); g = pictureBox1.CreateGraphics(); } private void button1_Click(object sender, EventArgs e) { double x1=100; //x P1 double x2=100; //x R1 double x3=100; //x R4 double x4=300; //x P4 double y1=100; double y2=100; double y3=100; double y4=100; double prevX = x1; double prevY = y1; g.Clear(Color.White); for (double t=0.1;t<1.0;t+=0.1) { 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; 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; g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY); prevX = qX; prevY = qY; } } private void button2_Click(object sender, EventArgs e) { double x1 = 100; //x P1 double x2 = 200; //x R1 double x3 = 300; //x R4 double x4 = 400; //x P4 double y1 = 200; double y2 = 100; double y3 = 200; double y4 = 100; double prevX = x1; double prevY = y1; g.Clear(Color.White); for (double t = 0; t < 1.0; t += 0.1) { double tempT = (1 - t); double qX = (Math.Pow(tempT, 3) * x1) + (Math.Pow(tempT, 2) * 3 * t * x2) + (3 * t * t * tempT * x3) + (Math.Pow(t, 3) * x4); double qY = (Math.Pow(tempT, 3) * y1) + (Math.Pow(tempT, 2) * 3 * t * y2) + (3 * t * t * tempT * y3) + (Math.Pow(t, 3) * y4); g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY); g.FillEllipse(new SolidBrush(Color.Black), (float)prevX-2.5f, (float)prevY-2.5f, 5f, 5f); prevX = qX; prevY = qY; } } private void button3_Click(object sender, EventArgs e) { g.Clear(Color.White); double[,] tab = new double[,] { { 20, 20 }, { 20, 100 }, { 100, 20 }, { 100, 100 }, { 200, 20 }, { 200, 100 }, { 300, 20 }, { 300, 100 } }; for (int i = 3; i < tab.GetLength(0); i++) { double prevX = tab[i - 3, 0] * (1) / 6 + tab[i - 2, 0] * 4 / 6 + tab[i - 1, 0] * (1) / 6; double prevY = tab[i - 3, 1] * (1) / 6 + tab[i - 2, 1] * 4 / 6 + tab[i - 1, 1] * (1) / 6; for (double t = 0; t < 1.0; t += 0.1) { 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); 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); g.DrawLine(pen, (float)prevX, (float)prevY, (float)qX, (float)qY); } } } } }