Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Friday, December 5, 2014

  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



0 comments:

Post a Comment

Popular Posts