#include<stdio.h> #include<graphics.h> struct point { int x,y; }pol[3],polnew[3],circ,insid[12]; int n,r; float trans[3][3],result[3][1],xandy[3][1]; void plot(int,int,int,int); void boundaryfill4(int,int,int,int); void midpoint(int xc,int yc,int r) { int x=0; int y=r; int p=1-r; plot(xc,yc,x,y); while(x<y) { x++; if(p<0) p+=2*x+1; else { y--; p+=2*(x-y)+1; } plot(xc,yc,x,y); } } void plot(int xc,int yc,int x,int y) { putpixel(xc+x,yc+y,10); putpixel(xc-x,yc+y,10); putpixel(xc+x,yc-y,10); putpixel(xc-x,yc-y,10); putpixel(xc+y,yc+x,10); putpixel(xc-y,yc+x,10); putpixel(xc+y,yc-x,10); putpixel(xc-y,yc-x,10); } void drawpol() { int i; for(i=0;i<2;i++) line(pol[i].x,pol[i].y,pol[(i+1)].x,pol[(i+1)].y); } void drawnewpol() { int i; for(i=0;i<2;i++) line(polnew[i].x,polnew[i].y,polnew[(i+1)].x,polnew[(i+1)].y); } void mulmat() { int i,j,k; for(i=0;i<3;i++) { for(j=0;j<1;j++) { result[i][j]=0.0; for(k=0;k<3;k++) result[i][j]+=trans[i][k]*xandy[k][j]; } } } void transformpoint(int x,int y) { xandy[0][0]=x; xandy[1][0]=y; xandy[2][0]=1; mulmat(); } void transformpoly() { int i; for(i=0;i<3;i++) { xandy[0][0]=pol[i].x; xandy[1][0]=pol[i].y; xandy[2][0]=1; mulmat(); polnew[i].x=result[0][0]; polnew[i].y=result[1][0]; } } void makeIdentity() { int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) trans[i][j]=0.0; trans[i][i]=1.0; } } void rotate(int rx,int ry,int an) { float ang; ang=(float)(an*(3.14/180)); trans[0][0]=cos(ang); trans[0][1]=-sin(ang); trans[0][2]=rx*(1-cos(ang))+ry*sin(ang); trans[1][0]=sin(ang); trans[1][1]=cos(ang); trans[1][2]=ry*(1-cos(ang))-rx*sin(ang); } void boundaryfill4(int x,int y,int new,int bdry) { int current=getpixel(x,y); if((current!=bdry)&&(current!=new)) { putpixel(x,y,new); boundaryfill4(x+1,y,new,bdry); boundaryfill4(x-1,y,new,bdry); boundaryfill4(x,y+1,new,bdry); boundaryfill4(x,y-1,new,bdry); } } int main() { int i,j,angle=0,gd=DETECT,gm=VGAMAX,ch; int color[]={1,14,3,4,5,6,7,8,9,11,12,13}; printf("Enter the orgin "); scanf("%d%d",&circ.x,&circ.y); printf("Enter the radius "); scanf("%d",&r); do{ printf("\nMENU\n-------\n1.Enter inside points to fill\n 2.Take the inside points automatically"); printf("\nEnter ur choice "); scanf("%d",&ch); }while(ch>2&&ch<1); if(ch==1) { printf("\nEnter the inside point of circle "); scanf("%d%d",&insid[0].x,&insid[0].y); for(i=1;i<12;i++) { printf("\nEnter the inside point %d ",i); scanf("%d%d",&insid[i].x,&insid[i].y); } } initgraph(&gd,&gm,"NULL"); setcolor(10); midpoint(circ.x,circ.y,r); makeIdentity(); j=360/11; pol[0].x=circ.x; pol[0].y=circ.y+r; pol[1].x=pol[0].x; pol[1].y=pol[0].y+50; rotate(circ.x,circ.y,j); transformpoint(pol[0].x,pol[0].y); pol[2].x=result[0][0]; pol[2].y=result[1][0]; rotate(circ.x,circ.y,360/22); transformpoint(pol[1].x,pol[1].y); pol[1].x=result[0][0]; pol[1].y=result[1][0]; if(ch==2) { insid[0].x=circ.x; insid[0].y=circ.y; insid[1].x=(pol[0].x+pol[1].x+pol[2].x)/3; insid[1].y=(pol[0].y+pol[1].y+pol[2].y)/3; } boundaryfill4(insid[0].x,insid[0].y,color[0],10); drawpol(); boundaryfill4(insid[1].x,insid[1].y,color[1],10); for(i=0;i<10;i++) { angle+=j; rotate(circ.x,circ.y,angle); transformpoly(); drawnewpol(); if(ch==2) { insid[i+2].x=(polnew[0].x+polnew[1].x+polnew[2].x)/3; insid[i+2].y=(polnew[0].y+polnew[1].y+polnew[2].y)/3; } boundaryfill4(insid[i+2].x,insid[i+2].y,color[i+2],10); } while(!kbhit()); closegraph(); return 0; }
Wednesday, October 13, 2010
Draw the following figure(1)

Tuesday, October 12, 2010
Rotate a triangle along the circumference of a circle, also rotate the triangle with reference to its centroid

Rotate a triangle along the circumference of a circle, also rotate the triangle with reference to its centroid.
Use midpoint algorithm for circle drawing.
Use midpoint algorithm for circle drawing.
Tuesday, October 5, 2010
Monday, October 4, 2010
Tuesday, September 28, 2010
Monday, September 27, 2010
Subscribe to:
Posts (Atom)