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;

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


 

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

21051. Повреждающее действие на клетки фактороввнешней среды. Перекисное окисление липидов (ПОЛ) 50 KB
  Перекисное окисление липидов ПОЛ. ЦЕЛЬ ЛЕКЦИИ: Изучить механизмы ПОЛ и их роль в повреждении клеток. Общая характеристика ПОЛ. Механизмы ПОЛ.
21052. Патофизиология лихорадки и гипертермии 35.5 KB
  ЦЕЛЬ ЛЕКЦИИ: Изучить вопросы этиологии патогенеза и патогенетической терапии лихорадки и гипертермии. Характеристика лихорадки и гипертермии как типовых патологических процессов. Этиология и патогенез лихорадки типы температурных кривых.
21053. Патофизиологическая характеристика воспаления 28.5 KB
  Определение и классификация воспаления. Характеристика методов воспаления. Мечникова в изучение воспаления. Значение воспаления для организма.
21054. Резистентность и реактивность. Неспецифические факторы защиты организма 36.5 KB
  Реактивность это способность организма отвечать изменениями жизнедеятельности на факторы внешней и внутренней среды как в условиях нормы так и в условиях патологии. Реактивность определяет состояние резистентности. Высокая реактивность определяет низкую резистентность.
21055. Патологическая физиология аллергических реакций 36 KB
  Скорость накожной реакции после внутрикожного введения аллергена больному аллергией: а немедленного типа ГНТ волдырь. б замедленного типа ГЗТ 4872 часа инфильтрат. По локализации субстрата с которым можно перенести аллергию от больного к здоровому: а ГНТ гуморальный тип. б ГЗТ клеточный тип.
21056. Патофизиология опухолевого роста 21 KB
  Цель лекции: Рассмотреть современное состояние вопроса этиологии и патогенеза злокачественных опухолей. План лекции: Определение опухолей современные представления об этиологии и патогенезе опухолей отличие доброкачественных и злокачественных опухолей. Анаплазия это изменение структуры и биологических свойств опухолей делающих их похожими на недифференцированные ткани. Этиология опухолей факторы вызывающие развитие опухолей называются канцерогенными или бластогенными.
21057. Патофизиология анемий 34 KB
  Этиология патогенез и гематологическая характеристика острой постгеморрагической анемии. Этиология патогенез и гематологическая характеристика В12 и фолиеводефицитной анемии. По типу эритропоэза выделяет нормобластические и мегалобластические анемии. По диаметру эритроцитов выделяют нормоцитарные анемии 7585 мкм; макроцитарные анемии более 85 мкм; микроцитарные анемии менее 75 мкм.
21058. Патологическая физиология лейкоцитозов и лейкопений 27.5 KB
  По лейкограмме устанавливают вид сдвига ядра нейтрофилов при нейтрофильном лейкоцитозе. Существуют пять видов сдвига ядра нейтрофилов: 1. Гипорегенеративный сдвиг влево характеризуется абсолютным и относительным увеличением содержания сегментоядерных нейтрофилов. Регенеративный сдвиг характеризуется увеличением содержания сегментоядерных и палочкоядерных нейтрофилов.
21059. Патофизиология гемобластозов 17 KB
  ЦЕЛЬ ЛЕКЦИИ: Изучить этиологию патогенез принципы терапии и диагностики гемобластозов. ПЛАН ЛЕКЦИИ: Современные представления об этиологии и патогенезе гемобластозов. Классификация гемобластозов.