//第壹象限順弧
#include<reg51.h>
//#define xe 10 //終點橫坐標
//#define ye 0 //終點縱坐標
//#define x0 10 //起點橫坐標
//#define y0 0 //起點縱坐標
//#define R 10 //半徑
void xzRotateStep(); // X向走壹步
void yzRotateStep(); // -x向走壹步
void xfRotateStep(); // y向走壹步
void yfRotateStep(); // -y向走壹步
void d1shun(); //第壹象限順弧
void d4shun(); //第二象限順弧
void d3shun(); //第三象限順弧
void d2shun(); //第四象限順弧
int kx=0x01; int ky=0x10; //
/*延時函數*/
void display(int x)
{
int i,y;
for(i=x;i>0;i--)
for(y=100;y>0;y--);
}
void main()
{
d1shun();
d4shun();
d3shun();
d2shun();
}
void d1shun()
{
int F,xi,yi,count ;// (xi,yi)為動點坐標,F為偏差值,count為計數值。
int k=0;
int kx=
F=xi=0;
yi=10;
count=20;
do{
if(F>=0)
{
yfRotateStep(); //-y向走壹步
F=F-2*yi+1;
xi=xi;
yi=yi-1;
}
else
{
xzRotateStep(); //+x向走壹步
F=F+2*xi+1;
xi=xi+1;
yi=yi;
}
count--; k++;
P2=k;
}
while(count) ; //計數為0?
}
void d4shun()
{
int F,xi,yi,count ;// (xi,yi)為動點坐標,F為偏差值,count為計數值。
int k=0;
F=xi=10;
yi=0;
count=20;
do{
if(F>=0)
{
xfRotateStep(); //-x向走壹步
F=F-2*xi+1;
xi=xi-1;
yi=yi;
}
else
{
yfRotateStep(); //-y向走壹步
F=F+2*yi+1;
xi=xi;
yi=yi+1;
}
count--; k++;
P2=k;
}
while(count) ; //計數為0?
}
void d3shun()
{
int F,xi,yi,count ;// (xi,yi)為動點坐標,F為偏差值,count為計數值。
int k=0;
F=xi=0;
yi=-10;
count=20;
do{
if(F>=0)
{
yzRotateStep(); //+y向走壹步
F=F-2*yi+1;
xi=xi;
yi=yi-1;
}
else
{
xfRotateStep(); //-x向走壹步
F=F+2*xi+1;
xi=xi+1;
yi=yi;
}
count--; k++;
P2=k;
}
while(count) ; //計數為0?
}
void d2shun()
{
int F,xi,yi,count ;// (xi,yi)為動點坐標,F為偏差值,count為計數值。
int k=0;
F=xi=-10;
yi=0;
count=20;
do{
if(F>=0)
{
xzRotateStep(); //-x向走壹步
F=F-2*xi+1;
xi=xi-1;
yi=yi;
}
else
{
yfRotateStep(); //-y向走壹步
F=F+2*yi+1;
xi=xi;
yi=yi+1;
}
count--; k++;
P2=k;
}
while(count) ; //計數為0?
}
void xzRotateStep()
{
int i;
switch(kx)
{
case 0x01: kx=P1=0x02;display(200);for(i=0;i<20000;i++); break;
case 0x02: kx=P1=0x04;display(200);for(i=0;i<20000;i++) ;break;
case 0x04: kx=P1=0x01;display(200);for(i=0;i<20000;i++) ;break;
}
}
void xfRotateStep()
{
int i;
switch(kx)
{
case 0x01: kx=P1=0x04;display(200);for(i=0;i<20000;i++); break;
case 0x04: kx=P1=0x02;display(200);for(i=0;i<20000;i++) ;break;
case 0x02: kx=P1=0x01;display(200);for(i=0;i<20000;i++) ;break;
}
}
void yzRotateStep()
{
int j ;
switch(ky)
{
case 0x10: ky=P1=0x20;display(200);for(j=0;j<20000;j++);break;
case 0x20: ky=P1=0x40;display(200);for(j=0;j<20000;j++);break;
case 0x40: ky=P1=0x10;display(200);for(j=0;j<20000;j++);break;
}
}
void yfRotateStep()
{
int j ;
switch(ky)
{
case 0x10: ky=P1=0x40;display(200);for(j=0;j<20000;j++);break;
case 0x40: ky=P1=0x20;display(200);for(j=0;j<20000;j++);break;
case 0x20: ky=P1=0x10;display(200);for(j=0;j<20000;j++);break;
}
}