2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Алгоритм Брезенхема
Сообщение29.05.2015, 13:38 


15/11/14
40
Написал процедуру, отрезок отлично рисуется в 1 октанте, в 8 октанте не хочет. В чем может быть дело? Перепробовал все. Помогите пожалуйста.
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
procedure brezenhem(x1,y1,x2,y2:integer);
var dx,dy,i,y:integer; e0:double;
begin
 
dx:=x2-x1;
dy:=y2-y1;
e0:=2*dy-dx;
y:=y1;
 
//1 октант
if (dx>dy) and (y2>y1) and (x2>x1) then
for i:=x1 to x2 do begin
form1.paintbox1.canvas.Pixels[i,y]:=clblack;
e0:=e0+2*dy;//приращение ошибки при единичном шаге по горизонтальной оси
  if e0>=0 then begin
   inc(y);
   e0:=e0-2*dx;//коррекция ошибки при шаге по вертикальной оси
  end;
end;
  //8 октант
if  (dx>abs(dy)) and (y2<y1) and (x2>x1) then
 
for i:=x1 to x2 do begin
form1.paintbox1.canvas.Pixels[i,y]:=clblack;
e0:=e0+2*dy;
  if e0>=0 then begin
   dec(y);
   e0:=e0-2*dx;
  end;
end;
 
 end;              

 Профиль  
                  
 
 Re: Алгоритм Брезенхема
Сообщение01.06.2015, 10:46 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Еще актуально?
У вас в случае 8 октанта y2 меньше y1, следовательно e0 всегда получается отрицательным. Условие e0>=0 никогда не выполняется, всегда рисуется прямая линия. Вы немного неаккуратно перенесли основную идею алгоритма в код.

 Профиль  
                  
 
 Re: Алгоритм Брезенхема
Сообщение02.06.2015, 09:29 


15/11/14
40
rockclimber
Я уже нашел ошибку, надо abs делать для dx и dy) в самом начале:
Используется синтаксис Pascal
dx:=abs(x2-x1);
dy:=abs(y2-y1);
e0:=2*dy-dx;
y:=y1;
x:=x1;
...  

Но все равно спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group