Как реализовать Алгоритм Брезенхэма?

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

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

Вот как можно реализовать алгоритм Брезенхэма на языке программирования C:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void drawLine(int x1, int y1, int x2, int y2) {
    int dx = abs(x2 - x1);
    int dy = abs(y2 - y1);
    int sx = (x1 < x2) ? 1 : -1;
    int sy = (y1 < y2) ? 1 : -1;
    int error = dx - dy;

    while (x1 != x2 || y1 != y2) {
        // Вывести пиксель с координатами (x1, y1)
        printf("(%d, %d)n", x1, y1);

        int error2 = 2 * error;

        if (error2 > -dy) {
            error -= dy;
            x1 += sx;
        }

        if (error2 < dx) {
            error += dx;
            y1 += sy;
        }
    }
}

int main() {
    int x1, y1, x2, y2;
    printf("Введите координаты начальной точки (x1, y1): ");
    scanf("%d %d", &x1, &y1);
    printf("Введите координаты конечной точки (x2, y2): ");
    scanf("%d %d", &x2, &y2);

    drawLine(x1, y1, x2, y2);
    return 0;
}

В этой реализации мы используем алгоритм Брезенхэма для рисования линии от точки (x1, y1) до точки (x2, y2). Функция drawLine принимает начальные и конечные координаты линии. Мы вычисляем разницу между координатами точек и определяем, в каком направлении нужно двигаться по оси x и y с помощью переменных sx и sy.

Затем мы начинаем цикл, в котором пошагово перемещаемся от начальной точки до конечной точки, рассчитывая, насколько нужно сместиться по осям x и y. Мы выводим координаты каждого пикселя, которые находятся на этой линии. Параметр error позволяет нам корректировать координаты, чтобы избежать накопления ошибок при округлении.

В основной функции main мы просто получаем координаты от пользователя и вызываем функцию drawLine для рисования линии.

Алгоритм Брезенхэма позволяет достичь очень эффективной растеризации линий с использованием только целых чисел. Это делает его очень популярным в графических приложениях и играх.