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

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

Восстановить пароль Регистрация
 
masterlomaster
 Аватар для masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
14.12.2011, 22:07     Алгоритм Брезенхэма #1
Здравствуйте.

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


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;
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 22:07     Алгоритм Брезенхэма
Посмотрите здесь:

Алгоритм Брезенхэма C++
алгоритм C++
алгоритм C++
C++ Алгоритм
Алгоритм C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
masterlomaster
 Аватар для 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;
I.M.
 Аватар для 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;
masterlomaster
 Аватар для masterlomaster
11 / 11 / 1
Регистрация: 25.02.2011
Сообщений: 181
16.12.2011, 15:21  [ТС]     Алгоритм Брезенхэма #4
if(error2 > -deltaY)


Тут не каких подводных камней нет? просто минут deltaY?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.12.2011, 15:24     Алгоритм Брезенхэма #5
Да, просто меняем знак у числа на противоположный
masterlomaster
 Аватар для 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;
                }
Yandex
Объявления
16.12.2011, 17:01     Алгоритм Брезенхэма
Ответ Создать тему
Опции темы

Текущее время: 05:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru