Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(Румянцев)Задания к лабораторным.doc
Скачиваний:
5
Добавлен:
22.12.2018
Размер:
641.02 Кб
Скачать

Код программ

private void Form1_Load(object sender, EventArgs e)

{

bmp = new Bitmap(300, 300);

Gr = Graphics.FromImage(bmp);

Gr.Clear(Color.White);

p.Color = Color.Gray;

Gr.DrawRectangle(p, 100, 100, 100, 100);

pictureBox1.Image = bmp;

}

void end(int x, int y, ref Int32 kod, ref Int32 summ)

{

kod = 0;

summ = 0;

if (x < xl) { kod += 1; summ++; };

if (x > xr) { kod += 2; summ++; };

if (y > yn) { kod += 4; summ++; };

if (y < yv) { kod += 8; summ++; };

}

void koen(Int32 x1, Int32 y1, Int32 x2, Int32 y2, ref Int32 vid, ref Int32 kod1, ref Int32 kod2)

{

Int32 sum1 = 0, sum2 = 0;

end(x1, y1, ref kod1, ref sum1);

end(x2, y2, ref kod2, ref sum2);

vid = 2;

if (sum1 == 0 && sum2 == 0) vid = 1;

else

{

Int32 pr = kod1 & kod2;

if (pr != 0) vid = 0;

}

}

int search(Int32 kod, Int32 i)

{

if (i == 4) return kod & 8;

if (i == 3) return kod & 4;

if (i == 2) return kod & 2;

if (i == 1) return kod & 1; return 0;

}

void main()

{

Int32 x1 = Convert.ToInt32(textBox1.Text);

Int32 y1 = Convert.ToInt32(textBox2.Text);

Int32 x2 = Convert.ToInt32(textBox3.Text);

Int32 y2 = Convert.ToInt32(textBox4.Text);

Int32[] okno = new Int32[5];

okno[1] = 100;

okno[2] = 200;

okno[3] = 200;

okno[4] = 100;

Int32 flag = 1;

Double naklon = 0;

Int32 kod1 = 0, kod2 = 0;

if (x2 - x1 == 0) flag = -1;

else

{

naklon = Convert.ToDouble(y2 - y1) / Convert.ToDouble(x2 - x1);

if (naklon == 0) flag = 0;

}

for (Int32 i = 1; i <= 4; i++)

{

Int32 vid = 0;

koen(x1, y1, x2, y2, ref vid, ref kod1, ref kod2);

if (vid == 1) Gr.DrawLine(p, x1, y1, x2, y2);

if (vid == 0) return;

if (search(kod1, i) == (search(kod2,i))) continue;

if (search(kod1, i) == 0)

{

Int32 temp = x1; x2 = x1; x2 = temp;

temp = y1; y2 = y1; y2 = temp;

}

if ((flag != -1) && (i <= 2))

{

y1 = Convert.ToInt32(naklon * Convert.ToDouble(okno[i] - x1)) + y1;

x1 = okno[i];

}

else

{

x1 = Convert.ToInt32((1 / naklon) * Convert.ToDouble(okno[i] - y1)) + x1;

y1 = okno[i];

}

}

Gr.DrawLine(p, x1, y1, x2, y2);

}

private void button1_Click(object sender, EventArgs e)

{

bmp = new Bitmap(300, 300);

Gr = Graphics.FromImage(bmp);

Gr.Clear(Color.White);

p.Color = Color.Gray;

Gr.DrawRectangle(p, 100, 100, 100, 100);

main();

pictureBox1.Image = bmp;

}