Mô phỏng hàm Line vẽ đường thẳng trong đồ họa C++

March 07, 2023
Chương trình mô phỏng hàm LINE nâng cao trong đồ họa C++

Bài Giải



/*
Name: Mo phong ham Line trong thu vien Graphics
Copyright: None
Author: Tran Anh
Description: https://gimi.vn
*/
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>

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))
        {
                int y;
            if ((xb-xa)>0)
            {
                for (int x=xa;x<=xb;x++)
                {
                    y=m*x+b;
                    putpixel(x,y,color);
                }
            }
            else
            {
                for (int x=xa;x>=xb;x--)
                {
                    y=m*x+b;
                    putpixel(x,y,color);
                }
            }
        }
    else
        {
            int x;
            if ((yb-ya)>0)
            {
                for (int y=ya;y<=yb;y++)
                {
                    x=(y-b)/m;
                    putpixel(x,y,color);

                }
            }
            else
            {
                for (int y=ya;y>=yb;y--)
                {
                    x=(y-b)/m;
                    putpixel(x,y,color);
                }
            }
        }
}

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);
    }

}
main()
{
    initwindow(800,600);

    DrawLine(100,500,200,300,12);
    DDA(400,400,300,300,12);


    getch();
    return 0;
}