當前位置:編程學習大全網 - 編程語言 - 如何編寫順時針圓弧的逐點比較法插補算法程序

如何編寫順時針圓弧的逐點比較法插補算法程序

這是我自己編的壹個程序仿真通過,控制核心板是51單片機可以參考:

//第壹象限順弧

#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;

}

}

  • 上一篇:怎樣安裝和使用RSlogix Emulate 5000仿真軟件
  • 下一篇:葉問2視頻觀看 葉問2視頻下載 電影葉問2下載 電影葉問2迅雷下載地址拜托各位大神
  • copyright 2024編程學習大全網