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 GrafikaLabki5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Graphics gr = Graphics.FromImage( bmp ); int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height; int ile_pkt, tmp; int.TryParse(textBox1.Text, out tmp); p1.X = tmp; int.TryParse(textBox2.Text, out tmp); p1.Y = tmp; int.TryParse(textBox3.Text, out tmp); p2.X = tmp; int.TryParse(textBox4.Text, out tmp); p2.Y = tmp; int.TryParse(textBox5.Text, out tmp); p3.X = tmp; int.TryParse(textBox6.Text, out tmp); p3.Y = tmp; int.TryParse(textBox7.Text, out tmp); p4.X = tmp; int.TryParse(textBox8.Text, out tmp); p4.Y = tmp; int.TryParse(textBox9.Text, out ile_pkt); //Układ współrzędnych gr.DrawLine(pen1, 0, srodekY, maxX, srodekY); gr.DrawLine(pen1, srodekX, 0, srodekX, maxY); double t = 0; for ( int i = 0; i < ile_pkt; i++ ) { 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 ); 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 ); t += 1.0 / ile_pkt; points[i].X = srodekX + q.X; points[i].Y = srodekY - q.Y; } gr.DrawLines(pen2, points); //Rysowanie Beizera //punkty gr.FillEllipse(br1, srodekX + p1.X - 3, srodekY - p1.Y - 3, 6, 6); gr.FillEllipse(br1, srodekX + p2.X - 3, srodekY - p2.Y - 3, 6, 6); gr.FillEllipse(br1, srodekX + p3.X - 3, srodekY - p3.Y - 3, 6, 6); gr.FillEllipse(br1, srodekX + p4.X - 3, srodekY - p4.Y - 3, 6, 6); pictureBox1.Image = bmp; } private void label9_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { Graphics gr = Graphics.FromImage(bmp); int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height; int ile_pkt, tmp; int.TryParse(textBox1.Text, out tmp); p[0].X = tmp; int.TryParse(textBox2.Text, out tmp); p[0].Y = tmp; int.TryParse(textBox3.Text, out tmp); p[1].X = tmp; int.TryParse(textBox4.Text, out tmp); p[1].Y = tmp; int.TryParse(textBox5.Text, out tmp); p[2].X = tmp; int.TryParse(textBox6.Text, out tmp); p[2].Y = tmp; int.TryParse(textBox7.Text, out tmp); p[3].X = tmp; int.TryParse(textBox8.Text, out tmp); p[3].Y = tmp; p[4].X = 80; p[4].Y = -20; p[5].X = 100; p[5].Y = 20; p[6].X = 120; p[6].Y = -20; p[7].X = 140; p[7].Y = 20; int.TryParse(textBox9.Text, out ile_pkt); Point[][] points; for (int i = 0; i < 5; i++) //Układ współrzędnych gr.DrawLine(pen1, 0, srodekY, maxX, srodekY); gr.DrawLine(pen1, srodekX, 0, srodekX, maxY); double t = 0; for (int j = 3; j < 8; j++) { t = 0; for (int i = 0; i < ile_pkt; i++) { 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); 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 ); t += 1.0 / ile_pkt; points[j-3][i].X = srodekX + q.X; points[j-3][i].Y = srodekY - q.Y; } } for (int i=0; i<5; i++) gr.DrawLines(pen2, points[i]); //Rysowanie Beizera //punkty for (int i=0; i<8; i++) gr.FillEllipse(br1, srodekX + p[i].X - 3, srodekY - p[i].Y - 3, 6, 6); pictureBox1.Image = bmp; } private void button3_Click(object sender, EventArgs e) { Graphics gr = Graphics.FromImage(bmp); int srodekX = pictureBox1.Width / 2, srodekY = pictureBox1.Height / 2, maxX = pictureBox1.Width, maxY = pictureBox1.Height; gr.DrawLine(pen1, 0, srodekY, maxX, srodekY); gr.DrawLine(pen1, srodekX, 0, srodekX, maxY); int tmp; int.TryParse(textBox1.Text, out tmp); p1.X = tmp; int.TryParse(textBox2.Text, out tmp); p1.Y = tmp; int.TryParse(textBox3.Text, out tmp); p2.X = tmp; int.TryParse(textBox4.Text, out tmp); p2.Y = tmp; int.TryParse(textBox5.Text, out tmp); p3.X = tmp; int.TryParse(textBox6.Text, out tmp); p3.Y = tmp; int.TryParse(textBox7.Text, out tmp); p4.X = tmp; int.TryParse(textBox8.Text, out tmp); p4.Y = tmp; //punkty gr.FillEllipse(br1, srodekX + p1.X - 3, srodekY - p1.Y - 3, 6, 6); gr.FillEllipse(br1, srodekX + p4.X - 3, srodekY - p4.Y - 3, 6, 6); //wektory gr.DrawLine(pen3, srodekX + p1.X, srodekY - p1.Y, srodekX + p2.X + p1.X, srodekY - p2.Y - p1.Y); gr.DrawLine(pen3, srodekX + p4.X, srodekY - p4.Y, srodekX + p3.X + p4.X, srodekY - p3.Y - p4.Y); double t = 0.0; int ile_pkt; int.TryParse(textBox9.Text, out ile_pkt); for (int i = 0; i < ile_pkt; i++) { 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 ); 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 ); points[i].X = srodekX + q.X; points[i].Y = srodekY - q.Y; t += 1.0 / ile_pkt; } gr.DrawLines(pen2, points); pictureBox1.Image = bmp; } } }