Chương trình mô phỏng hàm LINE cơ bản vẽ đường thẳng trong đồ họa C++
March 07, 2023
HÀM LINE:
1. Hàm vẽ đường thẳng đơn giản (có quy tắc):
− Vẽ đường thẳng nằm dọc (có cùng tọa độ X = X1 = X2):
void DT_Doc(int x, int y1, int y2, int color)
{
if(y1>y2) //doi gia tri y lai neu y1>y2
{
y1=y1+y2;
y2=y1-y2;
y1=y1-y2;
}
for(int y=y1; y<=y2;y++)
putpixel(x,y,color);
}
− Vẽ đường thẳng nằm ngang (có cùng tọa độ Y = Y1 = Y2):
void DT_Ngang(int x1, int x2, int y, int color)
{
if(x1>x2) //doi gia tri lai neu x1>x2
{
x1=x1+x2;
x2=x1-x2;
x1=x1-x2;
}
for(int x=x1; x<=x2;x++)
putpixel(x,y,color);
}
− Vẽ đường thẳng là đường chéo chính (X1=Y1, Y2=Y2):
void DT_CheoChinh(int x1, int x2, int color)
{
if(x1>x2) //doi gia tri lai neu x1>x2
{
x1=x1+x2;
x2=x1-x2;
x1=x1-x2;
}
for(int x=x1;x<=x2;x++)
putpixel(x,x,color);
}
− Vẽ đường chéo phụ (X1=Y2, X2=Y1):
void DT_CheoPhu(int x1, int y1, int x2, int y2, int color)
{
//Thuc chat la duong cheo phu nen chi can nhan vao 2 gia tri la X1 va Y1 la du de xu ly
int x=x1,y=y1;
if(x1<y1) //Xac dinh dinh bat dau ve la tren hay duoi de van dung phep tinh phu hop
while(x!=y1) //Diem bat dau nam duoi
{
putpixel(x,y,color);
x++;
y--;
}
else
while(x!=y1) //Diem bat dau nam tren
{
putpixel(x,y,color);
x--;
y++;
}
}
2. Vẽ đường thẳng bằng thuật toán DrawLine (tự định nghĩa):
void DrawLine(int xa, int ya, int xb, int yb, int color)
{
float m=(yb-ya)*1.0/(xb-xa);
float b=ya-m*xa;
if (abs(xb-xa)>abs(yb-ya)) //Neu Delta X > Delta Y thi di theo X
{
int y;
if ((xb-xa)>0) //neu xa<xb thi lan luot duyet tang x
{
for (int x=xa;x<=xb;x++)
{
y=m*x+b;
putpixel(x,y,color);
}
}
else //nguoc lai xa>xb thi lan luot duyet giam x
{
for (int x=xa;x>=xb;x--)
{
y=m*x+b;
putpixel(x,y,color);
}
}
}
else //Nguoc lai Delta X < Delta Y thi di theo Y
{
int x;
if ((yb-ya)>0) //neu ya<yb thi lan luot duyet tang y
{
for (int y=ya;y<=yb;y++)
{
x=(y-b)/m;
putpixel(x,y,color);
}
}
else //nguoc lai ya>yb thi lan luot duyet giam y
{
for (int y=ya;y>=yb;y--)
{
x=(y-b)/m;
putpixel(x,y,color);
}
}
} }
3. Vẽ đường thẳng bằng thuật toán DDA (tự định nghĩa):
void DDA(int x1, int y1, int x2, int y2, int color)
{
int dx=x2-x1;
int dy=y2-y1;
float temp;
if(abs(dx)>abs(dy))
temp=abs(dx);
else
temp=abs(dy);
int xc=dx/int(temp);
int yc=dy/int(temp);
int x=x1, y=y1;
putpixel(x,y,color);
for(int i=1;i<=temp;i++)
{
x=x+xc;
y=y+yc;
putpixel(x,y,color);
}
}
4. Vẽ đường thẳng bằng hàm line() trong thư viện đồ họa:
line(x_dau, y_dau, x_cuoi, y_cuoi);
Bài Giải
Post a Comment