Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
10 / 10 / 2
Регистрация: 22.10.2010
Сообщений: 110
1

алгоритм Брезенхема и несимметричный ЦДА

09.10.2012, 18:14. Показов 3176. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите с программой на тему: "Генерация изображений отрезков на прямоугольном растре"
есть программа, которая рисует: (наибольшую пятиконечную) ЗВЕЗДУ и ПЯТИУГОЛЬНИК помещенный в эту звезду...> код программы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
unit Unit1;
interface // Открытый интерфейс модуля.
  uses Windows,Messages,SysUtils,Variants,Classes,Graphics,
  Controls,Forms,Dialogs,Math,StdCtrls; // Список подключаемых модулей.
type TForm1 = class(TForm) // Объявление класса формы.
// Объявление процедур.
  procedure FormPaint(Sender: TObject);// Для рисовании "формы".
  procedure FormResize(Sender: TObject);// Для изменения размеров окна.
end;
var Form1: TForm1;
implementation // Выполняет Interface этого модуля.
{$R *.dfm} // Включение определений формы.
//==============================================================================
// Реализация процедуры изменение размеров окна.
procedure TForm1.FormResize(Sender: TObject);
begin
  Invalidate; // Вынуждает перерисовываться элемент управления.
end;
//==============================================================================
// Реализация процедуры работы с рисованием "формы".
procedure TForm1.FormPaint(Sender: TObject);
var
  mas_px: array of TPoint;
  i, r,r_1, x_0,y_0: Integer;
  ugol, ugol_1: Real;
begin
  x_0:=ClientWidth div 2;
  y_0:=ClientHeight div 2;
  SetLength(mas_px, 5);
//========================
  // Пятиконечная звезда.
  ugol:=90; r:=Min(x_0,y_0)-20;
  for i:=0 to 4 do
  begin
    ugol:=ugol+(360/5); // Формирование звезды.
    mas_px[i].X:=Round(x_0+r*cos((180*pi/180)+(ugol*pi/180)+2*pi*i/5));
    mas_px[i].Y:=Round(y_0+r*sin((180*pi/180)+(ugol*pi/180)+2*pi*i/5));
  end;
  Canvas.Pen.Width:=20; // Выбор толщины линии пера.
  Canvas.Pen.Color:=clRed; // Выбор цвета пера.
  Canvas.Polygon(mas_px);
//========================
  // Пятиугольник.
  ugol_1:=-90; r_1:= 4*r div 10;
  for i:=0 to 4 do
  begin
    mas_px[i].X:=Round(x_0+r_1*cos((180*pi/180)+(ugol_1*pi/180)+2*pi*i/5));
    mas_px[i].Y:=Round(y_0+r_1*sin((180*pi/180)+(ugol_1*pi/180)+2*pi*i/5));
  end;
  Canvas.Pen.Width:=10; // Выбор толщины линии пера.
  Canvas.Pen.Color:=clBlue; // Выбор цвета пера.
  Canvas.Polygon(mas_px);
end;
----------------------
и есть алгоритм Брезенхема:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Реализация алгоритма Брезенхема.
procedure TForm1.Bresenham(x1,y1, x2,y2: Real; pixel: Integer);
var
  dx, dy, e, q: Real;
  i, sx, sy: Integer;
  c: Boolean;
begin
  dx:=Abs(x1-x2);
  dy:=Abs(y1-y2);
  sx:=Sign(x2-x1);
  sy:=Sign(y2-y1);
  c:=false;
  if dy>dx then
  begin
    q:=dx; dx:=dy; dy:=q;
    c:=true;
  end;
  e:=2*dy-dx;
  for i:=0 to Round(dx) do
  begin
    Canvas.Rectangle(Round(x1)*(pixel-1), Round(y1)*(pixel-1), Round(x1+2)*(pixel-1), Round(y1+2)*(pixel-1));
    if e>=0 then
    begin
      if c then x1:=x1+sx else y1:=y1+sy;
      e:=e-2*dx;
    end;
    if c then y1:=y1+sy else x1:=x1+sx;
    e:=e+2*dy;
  end;
end;
------
и алгоритм ЦДА:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Реализация алгоритма ЦДА.
procedure TForm1.CDA(x1, y1, x2, y2: Real; pixel: Integer);
var
  d, dx, dy: Real;
begin
  if (x1 > x2) then
  begin
    d:=x1; x1:=x2; x2:=d;
    d:=y1; y1:=y2; y2:=d;
  end;
  dx:=x2-x1;
  dy:=y2-y1;
  Canvas.Rectangle(Round(x1)*(pixel-1), Round(y1)*(pixel-1), Round(x1+1)*(pixel-1), Round(y1+1)*(pixel-1));
  if (Abs(dx) < Abs(dy)) then
  begin
    if dy = 0 then d:=0 else d:=dx/Abs(dy);
      while (y1<>y2) do
      begin
        if (dy < 0) then y1:=y1-1 else y1:=y1+1;
        x1:=x1+d;
        Canvas.Rectangle(Round(x1)*(pixel-1), Round(y1)*(pixel-1), Round(x1+1)*(pixel-1), Round(y1+1)*(pixel-1));
      end;
  end
  else
  begin
    if dx = 0 then d:=0 else d:=dy/Abs(dx);
    while (x1<>x2) do
    begin
      if (dx < 0) then x1:=x1-1 else x1:=x1+1;
      y1:=y1+d;
      Canvas.Rectangle(Round(x1)*(pixel-1), Round(y1)*(pixel-1), Round(x1+1)*(pixel-1), Round(y1+1)*(pixel-1));
    end;
  end;
end;
----------------
!!помогите это как то совместить, что бы работало и рисовало линии по данным алгоритмам (на прямоугольном растре).,.., [и данный рисунок получался именно на основе этих алгоритмов]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2012, 18:14
Ответы с готовыми решениями:

Алгоритм Брезенхема
Написал процедуру, отрезок отлично рисуется в 1 октанте, в 8 октанте не хочет. В чем может быть...

Алгоритм Брезенхема
Надо написать алгоритм брезенхема чтобы нажимая кнопку нарисовалось 8 линий выходящих из одной...

Алгоритм Брезенхема
Есть такой цикл и это кусок кода из этой статьи for (int x = x0; x &lt;= x1; x++) { ...

алгоритм Брезенхема
Построить график функции y=x^3. График строится с помощью отрезков. Для построения отрезков...

0
09.10.2012, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2012, 18:14
Помогаю со студенческими работами здесь

Алгоритм Брезенхема
Прошу помочь в вопроссе написания программы. А именно нужно нарисовать в Лазарусе отрезок,по методу...

Алгоритм Брезенхема
Есть такой код: FOR y=y0 TO y1 POINT x,y,5 err=err+difx IF 2*err&gt;=dify THEN x=x+incr...

Алгоритм Брезенхема
дорогие форумчане!не могли бы помочь в написании вот такой программки в delphi..... Построить...

Алгоритм Брезенхема
Сегодня дали задание реализовать процедуру рисования линии используя SetPixel. Дали алгоритм...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru