Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа Онищук 2ВСб-1.doc
Скачиваний:
18
Добавлен:
07.05.2015
Размер:
262.14 Кб
Скачать

3 Метод сканирующей строки

Задача: Разработать алгоритм и написать программу, демонстрирующую метод сканирующей строки для закрашивания треугольных областей [2].

Решение:

Класс:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

namespace Laba3

{

class FillTriangle

{

public void Fill(Graphics g, int[] x, int[] y, int[] rgb)

{

int maxy, miny;

maxy = y[0];

miny = maxy;

if(y[1] > maxy) maxy = y[1];

if(y[2] > maxy) maxy = y[2];

if(y[1] < miny) miny = y[1];

if(y[2] < miny) miny = y[2];

float t;

ArrayList mas = new ArrayList();

Pen myPen = new Pen(Color.FromArgb(255, rgb[0], rgb[1], rgb[2]));

for (int yt = miny; yt <= maxy; yt++)

{

mas.Clear();

if(y[0]!=y[1])

{

t = (float)(yt-y[1])/(float)(y[0] - y[1]);

if(t>=0 && t<=1)

mas.Insert(0,(int)(t*x[0] + (1-t)*x[1]));

}

{

t = (float)(yt-y[2])/(float)(y[1] - y[2]);

if(t>=0 && t<=1)

mas.Insert(0,(int)(t*x[1] + (1-t)*x[2]));

}

{

t = (float)(yt-y[2])/(float)(y[0] - y[2]);

if(t>=0 && t<=1)

mas.Insert(0,(int)(t*x[0] + (1-t)*x[2]));

}

g.DrawLine(myPen, (int)mas[0], yt, (int)mas[1], yt);

if(mas.Count == 3)

{

g.DrawLine(myPen, (int)mas[1], yt, (int)mas[2], yt);

}

}

}

}

}

Форма:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

using System.Drawing.Drawing2D;

namespace Laba3

{

public partial class Form1 : Form

{

private int k = 0;

private int[] x = new int[3];

private int[] y = new int[3];

private int[] rgb = new int[3];

public Form1()

{

InitializeComponent();

}

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

if (k <= 2)

{

x[k] = e.X;

y[k] = e.Y;

if (k == 2)

{

rgb[0] = 255;

rgb[2] = 0;

rgb[2] = 0;

Graphics g = Graphics.FromHwnd(this.Handle);

FillTriangle f = new FillTriangle();

f.Fill(g, x, y, rgb);

g.Dispose();

}

k++;

}

else

return;

}

}

}

Рисунок 3.1 Реализация программы, демонстрирующей метод сканирующей строки для закрашивания треугольных областей