Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DDA
- int xround(float m){
- int p=int(m);
- if(m-p>=0.5)
- return p+1;
- else
- return p;
- }
- void dda(int x1,int y1,int x2,int y2,int color){
- int i,dx=x2-x1,dy=y2-y1;
- float steps;
- if(dx>dy)
- steps=dx;
- else
- steps=dy;
- float xinc=float(dx)/steps;
- float x=x1;
- float y=y1;
- float yinc=float(dy)/steps;
- putpixel(xround(x),xround(y),color);
- for(i=0 ; i<steps ; i++){
- x=x+xinc;
- y=y+yinc;
- putpixel(xround(x),xround(y),color);
- }
- }
- //BRESLINE
- int one(int p){
- int p1;
- if(p<0)
- p1=-1;
- else p1=1;
- return p1;
- }
- void bres(int x1,int y1,int x2,int y2,int color){
- int dx,i,dy,p,x,y,xend,yend;
- int xinc=one(x2-x1);
- int yinc=one(y2-y1);
- dx=abs(x2-x1);
- dy=abs(y2-y1);
- x=x1; y=y1;
- if(dx>dy){
- p=2*dy-dx;
- putpixel(x,y,color);
- for(i=0;i<dx;i++){
- x+=xinc;
- if(p<0)
- p=p+2*dy;
- else{
- y+=yinc;
- p=p+2*(dy-dx);
- }
- putpixel(x,y,color);
- }
- }
- else{
- p=2*dx-dy;
- putpixel(x,y,color);
- for(i=0;i<dy;i++){
- y+=yinc;
- if(p<0)
- p=p+2*dx;
- else{
- x+=xinc;
- p=p+2*(dx-dy);
- }
- putpixel(x,y,color);
- }
- }
- }
- //BRESCIRCLE
- void plot(int xc,int yc,int x,int y){
- putpixel(xc+x,yc+y,WHITE);
- putpixel(xc-x,yc+y,WHITE);
- putpixel(xc+x,yc-y,WHITE);
- putpixel(xc-x,yc-y,WHITE);
- putpixel(xc+y,yc+x,WHITE);
- putpixel(xc-y,yc+x,WHITE);
- putpixel(xc+y,yc-x,WHITE);
- putpixel(xc-y,yc-x,WHITE);
- }
- void bres(int xc,int yc,int radius){
- int x=0,y=radius;
- int p=1-radius;
- plot(xc,yc,x,y);
- while(x<y){
- x++;
- if(p<0)
- p=p+2*x+1;
- else{
- y--;
- p=p+2*(x-y)+1;
- }
- plot(xc,yc,x,y);
- }
- }
- //MIDCIRCLE
- void plot(int xc,int yc,int x,int y){
- putpixel(xc+x,yc+y,WHITE);
- putpixel(xc-x,yc+y,BLUE);
- Putpixel(xc+x,yc-y,WHITE);
- putpixel(xc-x,yc-y,BROWN);
- putpixel(xc+y,yc+x,WHITE);
- putpixel(xc-y,yc+x,GREEN);
- putpixel(xc+y,yc-x,WHITE);
- putpixel(xc-y,yc-x,WHITE);
- }
- void midpoint(int xc,int yc,int r){
- x=0;
- y=r;
- plot(xc,yc,x,y);
- p=1-r;
- while(x<y){
- x++;
- if(p<0)
- p=p+2*(x+1);
- else{
- y--;
- p=p+2*(x-y)+1;
- }
- plot(xc,yc,x,y);
- }
- }
- //MIDELLIPSE
- void plot(int x,int y,int xc,int yc){
- putpixel(xc+x,yc+y,RED);
- putpixel(xc+x,yc-y,RED);
- putpixel(xc-x,yc+y,RED);
- putpixel(xc-x,yc-y,RED);
- }
- void myellipse(long xc,long yc,long rx,long ry){
- long rx2=rx*rx,ry2=ry*ry,twoRx2=2*rx2,p;
- long twoRy2=2*ry2,px=0,py=twoRx2*ry;
- long x=0,y=ry;
- p=ry2-rx2*ry+0.25*ry2;
- plot(0,ry,xc,yc);
- while(px<py){
- x++;
- px=px+twoRy2;
- if(p<0)
- p=p+px+ry2;
- else{
- y--;
- py=py-twoRx2;
- p=p+px-py+ry2;
- }
- plot(x,y,xc,yc);
- }
- p=(ry2*(x+0.5)*(x+0.5))+(rx2*(y-1)*(y-1))-(rx2*ry2);
- while(y>0){
- y--;
- py=py-twoRx2;
- if(p<0){
- x++;
- px=px+twoRy2;
- p=p+px-py-rx2;
- }
- else
- p=p-py-rx2;
- plot(x,y,xc,yc);
- }
- }
- //FILL
- void bound(int x,int y,int fillcolor,int bcolor){
- int color=getpixel(x,y);
- if(color!=fillcolor && color != bcolor){
- putpixel(x,y,fillcolor);
- bound(x+1,y,fillcolor,bcolor);
- bound(x-1,y,fillcolor,bcolor);
- bound(x,y-1,fillcolor,bcolor);
- bound(x,y+1,fillcolor,bcolor);
- }
- }
- void flood(int x,int y,int fillcolor,int oldcolor){
- if(getpixel(x,y)==oldcolor){
- putpixel(x,y,fillcolor);
- flood(x+1,y,fillcolor,oldcolor);
- flood(x-1,y,fillcolor,oldcolor);
- flood(x,y+1,fillcolor,oldcolor);
- flood(x,y-1,fillcolor,oldcolor);
- }
- }
- //REFLECTION
- int poly[30],a[9][3],b[3][3],c[9][3],poly2[30];
- int x=1,p,i,j,k,xc,yc,ch,op;
- void ref(){
- xc=getmaxx()/2;
- yc=getmaxy()/2;
- setfillstyle(0,0);
- printf("\n\n Enter number of points : ");
- scanf("%d",&p);
- j=0;
- for(i=0;i<p*2;i+=2){
- printf("\n Enter cordinate point x%d and y%d : ",j+1,j+1);
- scanf("%d",&poly[i]);
- scanf("%d",&poly[i+1]);
- j++;
- }
- poly[p*2]=poly[0];
- poly[p*2+1]=poly[1];
- for(i=0;i<p*2;i+=2){
- poly2[i]=xc+poly[i];
- poly2[i+1]=yc-poly[i+1];
- }
- poly2[p*2]=poly2[0];
- poly2[p*2+1]=poly2[1];
- fillpoly(p+1,poly2);
- line(0,yc,xc*2,yc);
- line(xc,0,xc,yc*2);
- j=0;
- for(i=0;i<p;i++){
- a[i][0]=poly[j];
- a[i][1]=poly[++j];
- a[i][2]=1;
- ++j;
- }
- for(i=0;i<3;i++)
- for(j=0;j<3;j++){
- b[i][j]=0;
- if(i==j)
- b[i][j]=1;
- }
- b[0][0]=-1;
- for(i=0;i<p;i++)
- for(j=0;j<3;j++){
- c[i][j]=0;
- for(k=0;k<3;k++)
- c[i][j]=c[i][j]+a[i][k]*b[k][j];
- }
- printf("\n\n\n\n\n\n\n\n\n Reflection : ");
- for(i=0;i<p;i++){
- printf("\n");
- for(j=0;j<3;j++)
- printf("%d\t",c[i][j]);
- }
- for(i=0,j=0;i<p;i++,j+=2){
- poly[j]=xc+c[i][0];
- poly[j+1]=yc-c[i][1];
- }
- poly[j]=poly[0];
- poly[j+1]=poly[1];
- fillpoly(p+1,poly);
- }
- //TRANSLATION
- int i,x,y,tx,ty,sx,sy,angle=10,xmax,ymax,xmid,ymid,op=1;
- float p1[10]={50,50,100,50,100,100,50,100,50,50};
- float b[3][3]={1,0,0,0,1,0,0,0,1};
- int c[1][1];
- float a[1][1];
- void trans(){
- printf("\nEnter x translation: ");
- scanf("%d",&tx);
- printf("\nEnter y translation: ");
- scanf("%d",&ty);
- b[0][0]=1;b[0][1]=0;b[0][2]=0;b[1][0]=0;
- b[1][1]=1;b[1][2]=0;b[2][0]=tx;b[2][1]=ty;b[2][2]=1;
- }
- void main(){
- int gd=DETECT,gm;
- clrscr();
- initgraph(&gd, &gm, "C:\\turboc3\\bgi");
- trans();
- xmax=getmaxx();
- ymax=getmaxy();
- xmid=xmax/2;
- ymid=ymax/2;
- setcolor(1);
- line(xmid,0,xmid,ymax);
- line(0,ymid,xmax,ymid);
- setcolor(4);
- for(i=0;i<8;i=i+2)
- line(p1[i]+xmid,ymid-p1[i+1],xmid+p1[i+2],ymid-p1[i+3]);
- for(i=0;i<9;i=i+2){
- a[0][0]=p1[i];a[0][1]=p1[i+1];
- c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+b[2][0];
- c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+b[2][1];
- p1[i]=c[0][0];
- p1[i+1]=c[0][1];
- }
- setcolor(15);
- for(i=0;i<8;i=i+2)
- line(p1[i]+xmid,ymid-p1[i+1],xmid+p1[i+2],ymid-p1[i+3]);
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement