Поиск…


Вступление

Линейный чертеж выполняется путем вычисления промежуточных положений вдоль пути линии между двумя заданными положениями конечных точек. Затем устройство вывода направляется для заполнения этих позиций между конечными точками.

Алгоритм рисования линии Bresenham

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

В алгоритме рисования линии Bresenham:

Для Slope | m | <1:
Увеличивается либо значение x
ИЛИ оба x и y увеличены с использованием параметра решения.

Для склона | m |> 1:
Любое значение y увеличивается
ИЛИ оба x и y увеличены с использованием параметра решения.

Алгоритм для наклона | m | <1:

  1. Введите две конечные точки (x1, y1) и (x2, y2) линии.

  2. Выделите первую точку (x1, y1).

  3. подсчитывать
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |

  4. Получить начальный параметр принятия решения как
    P = 2 * dely - delx

  5. Для I = 0 до delx на шаге 1

    Если p <0, то
    X1 = x1 + 1
    Пот (x1, y1)
    P = p + 2 dely

    еще
    X1 = x1 + 1
    Y1 = y1 + 1
    Участок (x1, y1)
    P = p + 2
    dely - 2 * delx

    Конец, если

    Конец для

  6. КОНЕЦ

Исходный код:

/* A C program to implement Bresenham line drawing algorithm for |m|<1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

int main()
{    
 int gdriver=DETECT,gmode;
 int x1,y1,x2,y2,delx,dely,p,i;
 initgraph(&gdriver,&gmode,"c:\\TC\\BGI");

printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);

putpixel(x1,y1,RED);

delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*dely)-delx;
for(i=0;i<delx;i++){
if(p<0)
{
 x1=x1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely);
}
else
{
 x1=x1+1;
 y1=y1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely)-(2*delx);
}
}
 getch();
 closegraph();
 return 0;
}

Алгоритм для наклона | m |> 1:

  1. Введите две конечные точки (x1, y1) и (x2, y2) линии.
  2. Выделите первую точку (x1, y1).
  3. подсчитывать
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. Получить начальный параметр принятия решения как
    P = 2 * delx - dely
  5. Для I = 0 к выполнению этапа 1

    Если p <0, то
    y1 = y1 + 1
    Пот (x1, y1)
    P = p + 2 delx

    еще
    X1 = x1 + 1
    Y1 = y1 + 1
    Участок (x1, y1)
    P = p + 2
    delx - 2 * dely

    Конец, если

    Конец для

  6. КОНЕЦ

Исходный код:

/* A C program to implement Bresenham line drawing algorithm for |m|>1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main()
{
int gdriver=DETECT,gmode;
int x1,y1,x2,y2,delx,dely,p,i;
initgraph(&gdriver,&gmode,"c:\\TC\\BGI");
printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);
putpixel(x1,y1,RED);
delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*delx)-dely;
for(i=0;i<delx;i++){
if(p<0)
{
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx);
}
else
{
x1=x1+1;
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx)-(2*dely);
}
}
getch();
closegraph();
 return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow