algorithm
Line Algorithm
Ricerca…
introduzione
Il disegno della linea viene eseguito calcolando le posizioni intermedie lungo il percorso della linea tra due posizioni dell'endpoint specificate. Un dispositivo di output viene quindi indirizzato a riempire queste posizioni tra gli endpoint.
Bresenham Line Drawing Algorithm
Teoria di fondo: Bresenham's Line Drawing Algorithm è un efficiente ed accurato algoritmo di generazione di linee raster sviluppato da Bresenham. Comporta solo il calcolo intero, quindi è preciso e veloce. Può anche essere esteso per visualizzare cerchi di altre curve.
Nell'algoritmo del disegno al tratto di Bresenham:
Per Pendenza | m | <1:
Viene aumentato il valore di x
O entrambi xey sono aumentati usando il parametro decisionale.
Per pendenza | m |> 1:
Viene aumentato il valore di y
O entrambi xey sono aumentati usando il parametro decisionale.
Algoritmo per pendenza | m | <1:
Immettere due punti finali (x1, y1) e (x2, y2) della linea.
Traccia il primo punto (x1, y1).
Calcolare
Delx = | x2 - x1 |
Dely = | y2 - y1 |Ottenere il parametro di decisione iniziale come
P = 2 * dely - delxPer I = 0 a delx nel passaggio di 1
Se p <0 allora
X1 = x1 + 1
Pot (x1, y1)
P = p + 2 dely
Altro
X1 = x1 + 1
Y1 = y1 + 1
Plot (x1, y1)
P = p + 2 dely - 2 * delx
Finisci se
Finisci perFINE
Codice sorgente:
/* 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;
}
Algoritmo per pendenza | m |> 1:
- Immettere due punti finali (x1, y1) e (x2, y2) della linea.
- Traccia il primo punto (x1, y1).
- Calcolare
Delx = | x2 - x1 |
Dely = | y2 - y1 | - Ottenere il parametro di decisione iniziale come
P = 2 * delx-dely - Perché I = 0 decelera al punto 1
Se p <0 allora
y1 = y1 + 1
Pot (x1, y1)
P = p + 2 delx
Altro
X1 = x1 + 1
Y1 = y1 + 1
Plot (x1, y1)
P = p + 2 delx - 2 * dely
Finisci se
Finisci per - FINE
Codice sorgente:
/* 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;
}