#include #include #include #define lin(a,b,c,d) line(320+(a),240-(b),320+(c),240-(d)) void writepixel(int x,int y,int cx,int cy,int sangle,int eangle) { double p; p=atan2(y,x)*180/M_PI; if(p<0) p+=360; if((sangle<=eangle && p>=sangle && p<=eangle) ||(sangle>eangle && (p>=sangle || p<=eangle)) ) putpixel(320+x+cx,240-(y+cy),WHITE); } void circlepoints(int x,int y,int cx,int cy,int sangle,int eangle) { // printf("%2d %2d ",x,y); writepixel(x,y,cx,cy,sangle,eangle); writepixel(-x,y,cx,cy,sangle,eangle); writepixel(x,-y,cx,cy,sangle,eangle); writepixel(-x,-y,cx,cy,sangle,eangle); writepixel(y,x,cx,cy,sangle,eangle); writepixel(-y,x,cx,cy,sangle,eangle); writepixel(y,-x,cx,cy,sangle,eangle); writepixel(-y,-x,cx,cy,sangle,eangle); // printf("\n"); } void mparc(int rad,int cx,int cy,int sangle,int eangle) { int x=0; int y=rad; double d= 5.0/ 4.0 - rad; circlepoints(x,y,cx,cy,sangle,eangle); while(y>x) { if(d<0) /* select E */ d+= 2.0 * x + 3.0; else { d+= 2.0 * (x-y) + 5.0; y--; } x++; circlepoints(x,y,cx,cy,sangle,eangle); } } void mpcircle(int r,int cx,int cy) { mparc(r,cx,cy,0,360); } void mpsector(int r,int cx,int cy,int sangle,int eangle) { mparc(r,cx,cy,sangle,eangle); lin(0,0,r*cos(M_PI*sangle/180),r*sin(M_PI*sangle/180)); lin(0,0,r*cos(M_PI*eangle/180),r*sin(M_PI*eangle/180)); } main() { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tcpp30\\bgi"); //the axes lin(-60,-60,60,60); lin(0,60,0,-60); //y lin(-60,60,60,-60); lin(-60,0,60,0); // x //all angles are positively mentioned and are in [0-360] //mpsector(50,0,0,0,270); mpsector(50,0,0,330,20); //mpcircle(40,10,10); getch(); return 0; }