
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 Реализация программы, демонстрирующей метод сканирующей строки для закрашивания треугольных областей