algorithm
Linjealgoritm
Sök…
Introduktion
Linjeteckning åstadkoms genom att beräkna mellanlägen längs linjen mellan två specificerade slutpunktspositioner. En utmatningsanordning riktas sedan för att fylla i dessa positioner mellan slutpunkterna.
Bresenham Line Ritningsalgoritm
Bakgrundsteori: Bresenham's Line Drawing Algoritm är en effektiv och exakt rasterlinjegenererande algoritm utvecklad av Bresenham. Det innefattar endast heltalskalkyl så att den är korrekt och snabb. Det kan också utökas för att visa cirklar ytterligare kurvor.
I Bresenham-ritningsalgoritm:
För sluttning | m | <1:
Endera värdet på x ökas
ELLER både x och y ökas med hjälp av beslutsparameter.
För sluttning | m |> 1:
Endera värdet på y ökas
ELLER både x och y ökas med hjälp av beslutsparameter.
Algoritm för sluttning | m | <1:
Ange två slutpunkter (x1, y1) och (x2, y2) på linjen.
Rita upp den första punkten (x1, y1).
Beräkna
Delx = | x2 - x1 |
Dely = | y2 - y1 |Skaffa den initiala beslutsparametern som
P = 2 * dely - delxFör att I = 0 ska dela i steg 1
Om p <0 då
X1 = x1 + 1
Kruka (x1, y1)
P = p + 2 dely
Annan
X1 = x1 + 1
Y1 = y1 + 1
Plot (x1, y1)
P = p + 2 dely - 2 * delx
Sluta om
Slut förSLUTET
Källkod:
/* 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;
}
Algoritm för sluttning | m |> 1:
- Ange två slutpunkter (x1, y1) och (x2, y2) på linjen.
- Rita upp den första punkten (x1, y1).
- Beräkna
Delx = | x2 - x1 |
Dely = | y2 - y1 | - Skaffa den initiala beslutsparametern som
P = 2 * delx - dely - För att I = 0 ska gå i steg 1
Om p <0 då
y1 = y1 + 1
Kruka (x1, y1)
P = p + 2 delx
Annan
X1 = x1 + 1
Y1 = y1 + 1
Plot (x1, y1)
P = p + 2 delx - 2 * dely
Sluta om
Slut för - SLUTET
Källkod:
/* 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;
}