32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
1

Алгоритм Брезенхема

28.05.2015, 15:25. Показов 1574. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал процедуру, отрезок отлично рисуется в 1 октанте, в 8 октанте не хочет. В чем может быть дело? Перепробовал все. Помогите пожалуйста
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
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;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2015, 15:25
Ответы с готовыми решениями:

Алгоритм Брезенхема для 3-х координат
есть алгоритм Брезенхема для построения прямой по двум координатам, а я хочу сделать по трём...

Алгоритмы Брезенхема.
Реализовать программу для построения прямоугольника с закруглявшими углами радиусом r. В программе...

Рисование окружности метотом Брезенхема
С помощью свойства Canvas.Pixels написать процедуры рисования линии методом аппроксимации...

Рисование прямой по алгоритму Брезенхема
Добрый день. Мне очень нужен исходник программы, которая рисует прямую по алгоритму Брезенхема....

11
3450 / 1638 / 236
Регистрация: 26.02.2009
Сообщений: 7,984
Записей в блоге: 5
29.05.2015, 00:50 2
не делфи, но всё же
http://habrahabr.ru/post/248153/
0
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
29.05.2015, 10:51  [ТС] 3
snake32, ой тут все так сложно..
0
3450 / 1638 / 236
Регистрация: 26.02.2009
Сообщений: 7,984
Записей в блоге: 5
29.05.2015, 12:04 4
Цитата Сообщение от danek130995 Посмотреть сообщение
ой тут все так сложно..
Ну если это сложно, я даже не знаю что и предложить...
Может проблема в языке? Си вообще не знаете?
0
5841 / 4573 / 1443
Регистрация: 14.04.2014
Сообщений: 20,306
Записей в блоге: 20
29.05.2015, 12:36 5
надо сделать внутреннюю процедуру, которая делает все, что надо, для случая dx > dy, переменные там можно назвать u,v, du, dv чтобы не путаться
а потом сделать внешнюю процедуру, которая будет вызывать внутреннюю

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure Brez(x,dx,y,dy:single);
  procedure BrezInt(var u,du,v,dv:single);
  begin
    //реализация тут
  end;
begin
  if dx>dy then
    BrezInt(x,dx,y,dy)
  else
    BrezInt(y,dy,x,dx);
end;
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
29.05.2015, 13:33  [ТС] 6
snake32, нет, СИ не знаю

Добавлено через 15 минут
krapotkin, я хочу оставить мой вариант, мне так понятнее, без вложенных процедур. Почему не рисуется линия? Условие срабатывает (ставлю брейкпоинт), когда рисую линию в 8 октанте, но не рисуется она почему то..
0
5841 / 4573 / 1443
Регистрация: 14.04.2014
Сообщений: 20,306
Записей в блоге: 20
29.05.2015, 23:04 7
патамушта
Цитата Сообщение от danek130995 Посмотреть сообщение
e0:=e0+2*dy;
а по смыслу dx
не уверен, не проверял
и вообще в твоей реализации не уверен вовсе...

возьми простую линию и рассчитай ее сам руками
и сразу поймешь, где значение не совпадает
не лень 3 дня ждать, пока дядя решит тебе на форуме задачку из 10 строк?
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
30.05.2015, 13:23  [ТС] 8
krapotkin, я уже к преподу подходил, он занятой человек, он сказал что дело было в том, что я не писал abs. Я написал дома, опять не работает. В понедельник мне уже сдавать, помогите пожалуйста.Данные вычисления правильны, вот откуда это берется:
Алгоритм Брезенхема


Алгоритм Брезенхема


Алгоритм Брезенхема
0
5841 / 4573 / 1443
Регистрация: 14.04.2014
Сообщений: 20,306
Записей в блоге: 20
30.05.2015, 13:27 9
если правильно - выложи код
ты предлагаешь всем по-быстрому написать свою реализацию
при этом "по-другому мне не надо, хочу как у меня"
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
30.05.2015, 13:59  [ТС] 10
krapotkin, код там-огромная программа, которую вы мне помогали, с рисованием квадрата, там еще и zoom замешан, она не играет роли. Играет роль только эта процедура, код которой я выложил выше. На вход поступают координаты начала(x1,y1) и конца (x2,y2) отрезка. Отрезок рисуется в 1 октанте, на рисунке он обозначен, там ошибка с проверкой да/нет-должно быть наоборот, но не суть. Система координат у нас перевернутая, поэтому зеркально отображаем ее сверху вниз, и получается, что первый октант у нас надо рисовать там, где 8. Ну я думаю, это и так понятно. Условие для 8 октанта срабатывает, но отрезок не рисуется. Вот в чем проблема.
0
5841 / 4573 / 1443
Регистрация: 14.04.2014
Сообщений: 20,306
Записей в блоге: 20
30.05.2015, 14:25 11
ошибка либо при счете либо при рисовании
а счет вы говорите - правильный
как может правильно посчитанная координата отображаться неправильно вообще?

если я нарисую произвольный отрезок (x1,y1)-(x2,y2) в 8 октанте - это решит вашу проблему?
что вы будете делать с моим отрезком???

что писать, чем помочь?
как вообще вы это себе видите?
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
02.06.2015, 09:26  [ТС] 12
ВСе, написал) Препод немного момог
0
02.06.2015, 09:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 09:26
Помогаю со студенческими работами здесь

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

алгоритм Брезенхема
нужно построить окружность по алгоритму Брезенхема 1. с вводом центра окружности и радиуса 2....

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

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

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

Алгоритм брезенхема
Привет! Итак соорудил кодище с Алгоритмом Брезенхема. Но он позволяет по чему то рисовать линии...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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