Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
#1

Алгоритм Брезенхэма - C++

14.12.2011, 22:07. Просмотров 523. Ответов 5
Метки нет (Все метки)

Здравствуйте.

Помогите пожалуйста разобраться с алгоритмом Брезенхэма. Кому не сложно поставте пожалуйста комментарии подробные к каждой строке.


C++
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
Рисование линий
 
Реализация на C++:
void drawLine(int x1, int y1, int x2, int y2)
{
    int deltaX = abs(x2 - x1);
    int deltaY = abs(y2 - y1);
    int signX = x1 < x2 ? 1 : -1;
    int signY = y1 < y2 ? 1 : -1;
    int error = deltaX - deltaY;
 
    for (;;)
    {
        setPixel(x1, y1);
 
        if(x1 == x2 && y1 == y2)
            break;
 
        int error2 = error * 2;
 
        if(error2 > -deltaY)
        {
            error -= deltaY;
            x1 += signX;
        }
 
        if(error2 < deltaX)
        {
            error += deltaX;
            y1 += signY;
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритм Брезенхэма (C++):

Алгоритм Брезенхэма - C++
Добрый вечер! пожалуйста помогите разобрать построение прямой через заданные две точки с координатами x1,y1 и x2,y2.

Алгоритм Брезенхэма - C++
Разбираюсь с принципом использования Алгоритма Брезенхэма, при написании программы на С++ возникают ошибки, не могу понять по какой причине...

Перевод из C# в C++ (VS 2015). Алгоритм Брезенхэма - C++
void BresenhamLine(int x0, int y0, int x1, int y1) { var steep = Math.Abs(y1 - y0) &gt; Math.Abs(x1 - x0); // Проверяем рост отрезка...

Ошибка компиляции в Алгоритме Брезенхэма - C++
Есть код, который компилю на QT, но всё время ругается на строчку error: 'setPixel' was not declared in this scope Что бы я вместо...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки ) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void lab () { int s1 = 0; int s2 =...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар) - C++
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
16.12.2011, 14:51  [ТС] #2
Конкретно тут непонятно что за 1: -1

int signX = x1 < x2 ? 1 : -1;
int signY = y1 < y2 ? 1 : -1;


и что за += и -=

error -= deltaY;
x1 += signX;
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.12.2011, 15:04 #3
Цитата Сообщение от masterlomaster Посмотреть сообщение
Конкретно тут непонятно что за 1: -1

int signX = x1 < x2 ? 1 : -1;
int signY = y1 < y2 ? 1 : -1;


и что за += и -=

error -= deltaY;
x1 += signX;
int signX;
if(x1 < x2)signX = 1;
else signX = -1;

int signY;
if(y1 < y2)signY = 1;
else signY = -1;

error = error - deltaY;
x1 = x1 + signX;
1
masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
16.12.2011, 15:21  [ТС] #4
if(error2 > -deltaY)


Тут не каких подводных камней нет? просто минут deltaY?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.12.2011, 15:24 #5
Да, просто меняем знак у числа на противоположный
1
masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
16.12.2011, 17:01  [ТС] #6
if(error2 > -deltaY) если это условие не выполняется то переходит на следующее?
{
error -= deltaY;
x1 += signX;
}

if(error2 < deltaX)
{
error += deltaX;
y1 += signY;



Добавлено через 26 минут
C++
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
void drawCircle(int x0, int y0, int radius) {
        int x = 0;
        int y = radius;
        int delta = 2 - 2 * radius;
        int error = 0;
        while(y >= 0) {
                setPixel(x0 + x, y0 + y);
                setPixel(x0 + x, y0 - y);
                setPixel(x0 - x, y0 + y);
                setPixel(x0 - x, y0 - y);
                error = 2 * (delta + y) - 1;
                if(delta < 0 && error <= 0) {
                        ++x;
                        delta += 2 * x + 1;
                        continue;
                }
                error = 2 * (delta - x) - 1;
                if(delta > 0 && error > 0) {
                        --y;
                        delta += 1 - 2 * y;
                        continue;
                }
                ++x;
                delta += 2 * (x - y);
                --y;
        }
}
Что это значит?
C++
1
2
3
4
5
  if(delta < 0 && error <= 0) {
                        ++x;
                        delta += 2 * x + 1;
                        continue;
                }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 17:01
Привет! Вот еще темы с ответами:

Помогите алгоритм для char переделать в алгоритм для float - C++
char* DecToBin(char x, char* str) { int i; for (i = sizeof(x)*8-1; i&gt;=0; i--) { str = (x&amp;1 == 1) ? '1' : '0'; x = x &gt;&gt;...

Волновой алгоритм (алгоритм Ли) - C++
Здравствуйте! У кого-нибудь есть реализованный волновой алгоритм (алгоритм Ли) ? Дело в том, что я игрушку захотел написать (что-то...

Алгоритм Брезенхэма - Lisp
У кого есть программа, которая реализует алгоритм Брезенхема

Алгоритм Брезенхэма - Delphi
Ребят, кто знает где можно найти хорошее чтиво(ссылку) по Теме: &quot;построение окружности и отрезка (по Брезенхему)&quot; Именно нужна не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.12.2011, 17:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru