50348

Заповнення багатокутників

Лабораторная работа

Информатика, кибернетика и программирование

Програмно реалізувати алгоритм визначення попадання точки в трикутник. Реалізувати найпростіший алгоритм заповнення певним кольором довільного контуру із заданим кольором межі.Малювання зафарбованого трикутника:

Украинкский

2014-01-21

143 KB

3 чел.

Міністерство освіти і науки України

Черкаський Національний Університет ім. Богдана Хмельницького

Факультет ОТІУС

Звіт

до Лабораторної Роботи №3

Виконав:

студент 2-го курсу

групи КС-11

         Свідерський М.Ю.

Черкаси 2013

Тема: Заповнення багатокутників.

Завдання:

  1.  Створити процедуру малювання зафарбованого трикутника.

Програмно реалізувати алгоритм визначення попадання точки в трикутник.

Реалізувати найпростіший алгоритм заповнення певним кольором довільного контуру із заданим кольором межі.

Малювання зафарбованого трикутника:

procedure TForm1.Button1Click(Sender: TObject);

var

 A,B,C,T: Tposition;

 i,x1,x2,sy : integer;

begin

 Image1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);

 A.x := StrToInt(Edit1.Text);

 A.y := StrToInt(Edit2.Text);

 B.x := StrToInt(Edit3.Text);

 B.y := StrToInt(Edit4.Text);

 C.x := StrToInt(Edit5.Text);

 C.y := StrToInt(Edit6.Text);

 If A.y>B.y then begin T:=B; B:=A; A:=T; end;

 If A.y>C.y then begin T:=C; C:=A; A:=T; end;

 If B.y>C.y then begin T:=B; B:=C; C:=T; end;

 for sy := A.x to C.y do

   begin

     x1 := round(A.x + (sy - A.y)*(C.x - A.x)/(C.y - A.y));

     if (sy < B.y) then

       x2 := round(A.x + (sy - A.y)*(B.x - A.x)/(B.y - A.y))

     else

       if (C.y =  B.y) then

         x2 := B.x

       else

         x2 := round(B.x + (sy - B.y)*(C.x - B.x)/(C.y - B.y));

     if (x1 > x2) then

       begin

         T.x := x1;

         x1 := x2;

         x2 := T.x;

       end;

     i := x1;

     while (i <> x2) do

       begin

         inc(i);

         Image1.Canvas.Pixels[i,sy] := clBlue;

       end;

   end;

end;

Визначення попадання точки в трикутник:

procedure TForm1.Button1Click(Sender: TObject);

var

 A,B,C,T : TPosition;

 x1,x2,sy,xpr,ypr : integer;

begin

 A.x := StrToInt(Edit1.Text);

 A.y := StrToInt(Edit2.Text);

 B.x := StrToInt(Edit3.Text);

 B.y := StrToInt(Edit4.Text);

 C.x := StrToInt(Edit5.Text);

 C.y := StrToInt(Edit6.Text);

 xpr := StrToInt(Edit7.Text);

 ypr := StrToInt(Edit8.Text);

 If A.y>B.y then begin T:=B; B:=A; A:=T; end;

 If A.y>C.y then begin T:=C; C:=A; A:=T; end;

 If B.y>C.y then begin T:=B; B:=C; C:=T; end;

 if ((ypr >= A.x) and (ypr <= C.y)) then

   begin

     sy := ypr;

     x1 := round(A.x + (sy - A.y)*(C.x - A.x)/(C.y - A.y));

     if (sy < B.y) then

       x2 := round(A.x + (sy - A.y)*(B.x - A.x)/(B.y - A.y))

     else

       if (C.y =  B.y) then

         x2 := B.x

       else

         x2 := round(B.x + (sy - B.y)*(C.x - B.x)/(C.y - B.y));

     if (x1 > x2) then

       begin

         T.x := x1;

         x1 := x2;

         x2 := T.x;

       end;

     if ((xpr >= x1) and (xpr <= x2)) then

       Label10.Caption := 'YES'

     else

       Label10.Caption := 'NO';

   end

 else

   Label10.Caption := 'NO';

end;

Заповнення певним кольором довільного контуру із заданим кольором межі:

procedure TForm1.Button1Click(Sender: TObject);

var

 x1, y1, x2, y2, dx, dy, i, s1, s2, exch, temp : integer;

 e : real;

begin

 x1 := StrToInt(Edit1.Text);

 y1 := StrToInt(Edit2.Text);

 x2 := StrToInt(Edit3.Text);

 y2 := StrToInt(Edit4.Text);

 dx := abs(x2-x1);

 dy := abs(y2-y1);

 s1 := Sign(x2-x1);

 s2 := Sign(y2-y1);

 if (dy > dx) then

 begin

   temp := dx;

   dx := dy;

   dy := temp;

   exch := 1;

 end

 else exch := 0;

 e := 2*dy - dx;

 for i := 1 to dx do

 begin

   Image1.Canvas.Pixels[x1, y1] := ColorBox1.Selected;

   while(e >= 0) do

   begin

     if (exch = 1) then x1 := x1 + s1

     else y1 := y1 +s2;

     e := e - 2*dx;

   end;

   if (exch = 1) then y1 := y1 + s2

   else x1 := x1 + s1;

   e := e + 2*dy

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 Image1.Canvas.Rectangle(0,0,Image1.Width, Image1.Height);

end;

procedure TForm1.Button2Click(Sender: TObject);

var q : TQueue;

   x, y, x1, y1 : integer;

begin

 x := StrToInt(Edit5.Text);

 y := StrToInt(Edit6.Text);

 q := TQueue.Create();

 Image1.Canvas.Pixels[x, y] := ColorBox3.Selected;

 q.incert(x, y);

 while (not(Q.Empty()))do

 begin

   x1 := Q.getx;

   y1 := Q.gety;

   if ((x1-1 >= 0)and(Image1.Canvas.Pixels[x1-1, y1] <> ColorBox2.Selected)and(Image1.Canvas.Pixels[x1-1, y1] <> ColorBox3.Selected){(used[x1-1][y1] = false)})then

   begin

     Q.incert(x1-1, y1);

     Image1.Canvas.Pixels[x1-1, y1] := ColorBox3.Selected;

   end;

   if ((x1+1 <=905)and(Image1.Canvas.Pixels[x1+1, y1] <> ColorBox2.Selected)and(Image1.Canvas.Pixels[x1+1, y1] <> ColorBox3.Selected){(used[x1+1][y1] = false)})then

   begin

     Q.incert(x1+1, y1);

     Image1.Canvas.Pixels[x1+1, y1] := ColorBox3.Selected;

   end;

   if ((y1-1 >= 0)and(Image1.Canvas.Pixels[x1, y1-1] <> ColorBox2.Selected)and(Image1.Canvas.Pixels[x1, y1-1] <> ColorBox3.Selected){(used[x1][y1-1] = false)})then

   begin

     Q.incert(x1, y1-1);

     Image1.Canvas.Pixels[x1, y1-1] := ColorBox3.Selected;

   end;

   if ((y1+1 <=305)and(Image1.Canvas.Pixels[x1, y1+1] <> ColorBox2.Selected)and(Image1.Canvas.Pixels[x1, y1+1] <> ColorBox3.Selected){(used[x1][y1+1] = false)})then

   begin

     Q.incert(x1, y1+1);

     Image1.Canvas.Pixels[x1, y1+1] := ColorBox3.Selected;

   end;

 end;

end;

Висновок: на цій лабораторній роботі я навчився малювати зафарбовані трикутники, визначати попадання точки в трикутник, заповнювати певним кольором довільний контур із заданим кольором межі.


 

А также другие работы, которые могут Вас заинтересовать

2869. Технология изделий интегральной техники 3.57 MB
  Весь потенциал твёрдотельной электроники скрывался в единственном экспериментальном образце транзистора, действие которого было не понятно даже его творцам. Через 10 лет твёрдотельные приборы уже выиграли сражение с лампами за...
2870. Корпус подшипника насоса водяного ЗИЛ 431410 812.45 KB
  Выбрать способ получения отливки для условий крупносерийного производства детали: корпус подшипника насоса водяного ЗИЛ 431410. Описать способ получения заготовки. Разработать технологический процесс изготовления литейной формы ручной фо...
2871. Стационарные задачи квантовой механики 10.61 MB
  Стационарные задачи квантовой механики Итак – уравнение Шрёдингера для стационарных состояний, а волновая функция частицы, находящейся в стационарном квантовом состоянии, имеет вид , где. Плотность вероятности для частицы при это...
2872. САПР управляющих программ 2.55 MB
  Основным направлением развития технологических процессов в металлообработке в настоящее время является повышение производительности и гибкости. Это объясняется тем, что значительно растет номенклатура деталей в мелко- и среднесерийном производстве, ...
2873. Ядерная модель атома 5.88 MB
  Ядерная модель атома Резерфорд на основании результатов эксперимента по рассеянию частиц на атомах металлической фольги обосновал планетарную модель строения атома. Согласно этой модели, атом состоит из тяжёлого положительно заряженного ядра очень малых размеров...
2874. Квантовые системы из одинаковых частиц 9.6 MB
  Квантовые системы из одинаковых частиц Квантовые особенности поведения микрочастиц, отличающие их от свойств макроскопических объектов, проявляются не только при рассмотрении движения одной частицы, но и при анализе поведения системы микрочасти...
2875. Законы теплового излучения. Фотоэффект 9.36 MB
  При рассмотрении проблемы электромагнитного излучения твердых тел классическая физика столкнулась с непреодолимыми трудностями. Данные теоретических расчетов существенно не совпадали с экспериментальными данными в области коротковолнового диапазона ...
2876. Резание материалов 2.33 MB
  Изучение геометрии токарного резца Цель работы. Изучение типов токарных резцов, их основных элементов и геометрических параметров. Приобретение навыков измерения геометрических параметров резцов и ознакомление с измерительными приборами...
2877. Заслон в горно-лесистой местности 985 KB
  На протяжении всех лет существования Внутренние Войска были, есть и будут одним из основных гарантов стабильности общественной безопасности. Определяя структуру и содержание моей курсовой работы, я посчитал необходимым включить в него разно...