ad

Thursday, 5 July 2012

program for polygonal clipping

//program for polygonal clipping
#include< stdio.h >

#include< graphics.h >

struct JwindowR

{

        int JxR,JyR;

}JwinminR,JwinmaxR;

int JcolorR;



int JRectangleR()

{

    char FILENRRE[20];

    printf("\nInput the file name:");

    scanf("%s",FILENRRE);

        FILE *JfpR=fopen(FILENRRE,"r");

        fscanf(JfpR,"%d%d%d%d",&JwinminR.JxR,&JwinminR.JyR,&JwinmaxR.JxR,&JwinmaxR.JyR);

        fclose(JfpR);

        JDrawLineR(JwinminR.JxR,JwinminR.JyR,JwinminR.JxR,JwinmaxR.JyR);

        JDrawLineR(JwinminR.JxR,JwinmaxR.JyR,JwinmaxR.JxR,JwinmaxR.JyR);

        JDrawLineR(JwinmaxR.JxR,JwinmaxR.JyR,JwinmaxR.JxR,JwinminR.JyR);

        JDrawLineR(JwinmaxR.JxR,JwinminR.JyR,JwinminR.JxR,JwinminR.JyR);

}

int JDrawfaceR()

{

        JDrawEllipseR(250,250,150,85,0);

        JDrawEllipseR(250,380,70,110,1);

        JDrawLineR(250,305,250,330);

        JDrawLineR(235,305,265,305);

        JDrawEllipseR(175,225,10,10,5);

        JDrawEllipseR(325,225,10,10,5);

        JDrawEllipseR(100,235,25,25,2);

        JDrawLineR(85,235,115,235);

        JDrawEllipseR(397,235,25,25,2);

        JDrawLineR(383,235,413,235);

        JDrawEllipseR(250,130,8,35,3);

        JDrawEllipseR(250,65,8,30,4);

}

int JDrawEllipseR(int JxcR,int JycR,int JrxR,int JryR,int JchR)

{

        int Jx0R=0,Jy0R=JryR,JkcountR;

        float Jp1R=(JryR*JryR)-(JrxR*JrxR*JryR)+((1.0/4)*JrxR*JrxR),Jp2R=JryR*JryR*(Jx0R+1.0/2)*(Jx0R+1.0/2)+JrxR*JrxR*(Jy0R-1)*(Jy0R-1)-(JrxR*JrxR*JryR*JryR);

        JpolygonR(Jx0R,Jy0R,JxcR,JycR,JchR);

        while(2*JryR*JryR*Jx0R<2 data-blogger-escaped-br="" data-blogger-escaped-rxr="" data-blogger-escaped-y0r="">        {       Jx0R++;

                if(Jp1R<0 data-blogger-escaped-br="">                        Jp1R+=2*JryR*JryR*(Jx0R+1);

                else

                {       Jy0R--;

                        Jp1R+=2*JryR*JryR*(Jx0R+1)-2*JrxR*JrxR*(Jy0R-1)+JryR*JryR;

                }

                //delay(50);

                JpolygonR(Jx0R,Jy0R,JxcR,JycR,JchR);

        }

        while(Jy0R!=0)

        {

                Jy0R--;

                if(Jp2R>0)

                        Jp2R+=-JrxR*JrxR*(2*Jy0R-1);

                else

                {

                        Jx0R++;

                        Jp2R+=2*JryR*JryR*Jx0R+2*JryR*JryR-2*JrxR*JrxR*(Jy0R-1)+JrxR*JrxR;

                }

                JpolygonR(Jx0R,Jy0R,JxcR,JycR,JchR);

        }

}

int JpolygonR(int Jx0R,int Jy0R,int JxcR,int JycR,int JchR)

{

        if(JchR!=1&&JchR!=4)        if(inside(JxcR+Jx0R,JycR+Jy0R)) putpixel(JxcR+Jx0R,JycR+Jy0R,JcolorR);

        if(JchR!=1&&JchR!=3)        if(inside(JxcR-Jx0R,JycR+Jy0R)) putpixel(JxcR-Jx0R,JycR+Jy0R,JcolorR);

        if(JchR!=2&&JchR!=4)        if(inside(JxcR+Jx0R,JycR-Jy0R)) putpixel(JxcR+Jx0R,JycR-Jy0R,JcolorR);

        if(JchR!=2&&JchR!=3)        if(inside(JxcR-Jx0R,JycR-Jy0R)) putpixel(JxcR-Jx0R,JycR-Jy0R,JcolorR);

        if(JchR==2)

        {

                JDrawLineR(JxcR+Jx0R,JycR+Jy0R,JxcR-Jx0R,JycR+Jy0R);

        }

        if(JchR==5)

        {

                JDrawLineR(JxcR+Jx0R,JycR+Jy0R,JxcR-Jx0R,JycR+Jy0R);

                JDrawLineR(JxcR+Jx0R,JycR-Jy0R,JxcR-Jx0R,JycR-Jy0R);

        }

        //delay(50);

}

int inside(int JxR,int JyR)

{

        int JicountR;

        for(JicountR=0;JicountR<4 data-blogger-escaped-br="" data-blogger-escaped-icountr="">        {

                switch(JicountR)

                {

                        case 0: if(JxR                        case 1: if(JxR>JwinmaxR.JxR)    return 0;       break;

                        case 2: if(JyR>JwinmaxR.JyR)    return 0;       break;

                        case 3: if(JyR                }

        }

        return 1;

}

int JDrawLineR(int Jx1R,int Jy1R,int Jx2R,int Jy2R)

{

        int JdxR=Jx2R-Jx1R,JdyR=Jy2R-Jy1R,JxR=Jx1R,JyR=Jy1R,JiR=1,JpR,JxInc=1,JyInc=1,JcntR,JtR;

        float JslopR;

        if(JdyR<0 data-blogger-escaped-br="" data-blogger-escaped-dyr="" data-blogger-escaped-jyinc="-1;}">        if(JdxR<0 data-blogger-escaped-br="" data-blogger-escaped-dxr="" data-blogger-escaped-jxinc="-1;}">        JslopR=(JdyR*1.0)/JdxR;

        if(JslopR>1)

        {       JtR=JdxR;

                JdxR=JdyR;

                JdyR=JtR;

        }

        if(inside(JxR,JyR))     putpixel(JxR,JyR,JcolorR);

        JpR=2*JdyR-JdxR;

        JcntR=(JdxR        while(JiR        {

                if(JslopR<1 data-blogger-escaped-br="" data-blogger-escaped-else="" data-blogger-escaped-jxr="" data-blogger-escaped-jyr="" data-blogger-escaped-xinc="" data-blogger-escaped-yinc="">                if(JpR<0 data-blogger-escaped-br="">                        JpR+=2*JdyR;

                else

                {

                        if(JslopR<1 data-blogger-escaped-br="" data-blogger-escaped-else="" data-blogger-escaped-jxr="JxR+JxInc;" data-blogger-escaped-jyr="JyR+JyInc;">                        JpR+=2*(JdyR-JdxR);

                }

                if(inside(JxR,JyR))     putpixel(JxR,JyR,JcolorR);

                JiR++;

                //delay(50);

        }

}

int main()

{

        int JgdR=DETECT,JgmR;

        JwinminR.JxR=JwinminR.JyR=0;

        initgraph(&JgdR,&JgmR,"");

        JwinmaxR.JxR=getmaxx();JwinmaxR.JyR=getmaxy();

        JcolorR=15;

        printf("************************FIGURE BEFORE  CLIPPING**********************************");

        JDrawfaceR();

        setcolor(5);

        delay(1000); 

        setbkcolor(0);

        JRectangleR();

        JcolorR=3;

        delay(1000);

    printf("******************FIGURE AFTER CLIPPING******************************");

    JDrawfaceR();

        getch();

        closegraph();

}


1 comment: