Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 15:19   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Здравствуйте, уважаемые форумчане)
Рисую прямую (отрезок прямой) методом Брезенхема. Вроде бы написал весь код , но почему-то ничего не рисуется...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    x1,x2,y1,y2,dx,dy,s1,s2,x,y,o,i,v,obmen   : integer;
begin
  x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  x:=x1;
  y:=y1;
  dx:=(abs(x2-x1));
  dy:=(abs(y2-y1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if dy>dx then
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;
  end
  else obmen:=0;
  o:=2*dy-dx;
  for i := 1 to dx do
  begin
    form1.Canvas.Pixels[x,y]:=clBlack;
    while o>=0 do
    begin
      if obmen=1 then
      x:=x+s1
      else
        y:=y+s2;
      o:=o-2*dx;
    end;
    if obmen=1 then y:=y+s2
    else x:=x+x1;
    o:=o+2*dy;
  end;
  form1.refresh;
  self.Repaint; 
end;
подскажите -где ошибка....или скорее -чего не хватает?
Заранее благодарю.

насколько я понимаю , координаты пикселей рассчитываются от верхнего левого угла формы, причём направление "вниз" считается положительным направлением оси OY.....так ведь?
--------------------------------------
прикрепляю архив с "проектом" ))
Вложения
Тип файла: zip постороение отрезка.zip (26.6 Кб, 64 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось Stilet; 31.05.2010 в 09:51.
vedro-compota вне форума Ответить с цитированием
Старый 31.05.2010, 09:41   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    x1,x2,y1,y2,dx,dy,s1,s2,x,y,o,i,v,obmen   : integer;
begin
  x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  x:=x1;
  y:=y1;
  dx:=(abs(x2-x1));
  dy:=(abs(y2-y1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if dy>dx then
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;
  end
  else obmen:=0;
  o:=2*dy-dx;
  for i := 1 to dx do
  begin
    form1.Canvas.Pixels[x,y]:=clBlack;
    while o>=0 do
    begin
      if obmen=1 then
      x:=x+s1
      else
        y:=y+s2;
      o:=o-2*dx;
    end;
    if obmen=1 then y:=y+s2
    else x:=x+x1;
    o:=o+2*dy;
  end;
  //form1.refresh;
  //self.Repaint; 
end;
Ну и из события OnPaint у формы убрать.
dr.Chas вне форума Ответить с цитированием
Старый 31.05.2010, 14:22   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

спасибо )) то есть мне не следовало обновлять форму? да ? ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 31.05.2010, 15:24   #4
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

ещё там ( ну это не относилось в моему вопросу - но просто, для будущих поколений) у меня ошибка - вот в этом фрагменте выделяю то, что исправил:
Код:
 while o>=0 do
    begin
      if obmen=1 then
      x:=x+s1
      else
        y:=y+s2;
      o:=o-2*dx;
    end;
    if obmen=1 then y:=y+s2
    else x:=x+s1; //  а не x1 ;) 
    o:=o+2*dy;
то есть теперь код выглядит так :
Код:
x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  x:=x1;
  y:=y1;
  dx:=(abs(x2-x1));
  dy:=(abs(y2-y1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if dy>dx then
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;
  end
  else obmen:=0;
  o:=2*dy-dx;
  for i := 1 to dx do
  begin
    form1.Canvas.Pixels[x,y]:=clBlack;
    while o>=0 do
    begin
      if obmen=1 then
      x:=x+s1
      else
        y:=y+s2;
      o:=o-2*dx;
    end;
    if obmen=1 then y:=y+s2
    else x:=x+s1;
    o:=o+2*dy;
  end;
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 31.05.2010, 15:42   #5
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

ну да вы же на ней рисуете, и вызываете методы которые её пересовывают.
dr.Chas вне форума Ответить с цитированием
Старый 31.05.2010, 19:49   #6
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Спасибо,dr.Chas. Но что-то с этими методами странно как-то ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм А* Claster Помощь студентам 1 24.05.2011 18:45
Алгоритм Брезенхема для рисования эллипса vedro-compota Общие вопросы Delphi 4 24.05.2010 20:35
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26
Алгоритм?! Spartaner Фриланс 2 28.05.2009 03:22
Алгоритм Rifler Паскаль, Turbo Pascal, PascalABC.NET 3 30.03.2008 01:33