- 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);
- }
- }
- }
- }
- }