求助电机画圆算法
求助电机画圆算法 内圆周与外圆周比就是速度比,两个电机设定恒定速度 能说清楚一点吗,有点不懂 找本计算机图形学看看,这个与LCD的画圆其实没有不同的 你能再纸上任意指定点画点吗?如果可以,你想画什么都行。 严重关注,期待高手赐教!! #include<reg52.h>#include<math.h>
//控制左右转的电机
sbitzm2=P1^0;
sbitzm1=P1^1;
sbit cp1 = P1^4;
sbit cw1 = P1^5;
//控制上下转的电机
sbit m2=P2^2;
sbit m1=P2^3;
sbit cp2 = P2^6;
sbit cw2 = P2^4;
//sbitjidian=P1^7;
float x,y,r;
float buj1,buj2;
int y1=0;
void delay(int i);
void yuan(float r);
void lr(char x);
void fb(char x);
void main()
{
zm2=0;//1/4细分
zm1=1;
m2=0;//1/4细分
m1=1;
//jidian=0;
while(1)
{
yuan(100);
}
}
void yuan(float r)
{
int k;
for(x=0;x<=r;x++)
{
y=r-sqrt(r*r-x*x);
lr(1);
k=(int)(y1-y);
fb(k);
y1-=k;
}
y1=0;
for(x=r;x>=0;x--)
{
y=sqrt(r*r-x*x);
lr(-1);
k=(int)(y1-y);
fb(k);
y1-=k;
}
y1=0;
for(x=0;x<=r;x++)
{
y=r-sqrt(r*r-x*x);
lr(-1);
k=(int)(y1-y);
fb(-k);
y1-=k;
}
y1=0;
for(x=r;x>=0;x--)
{
y=sqrt(r*r-x*x);
lr(1);
k=(int)(y1-y);
fb(-k);
y1-=k;
}
}
void delay(int i)
{
while(i --);
}
void lr(char x)
{
char j;
if(x < 0)
{
cw1 = 1;
x= -x;
}
else
cw1 = 0;
for(j = 1;j <= x;j++)
{
cp1 = 0;
delay(1000);
cp1 = 1;
delay(1000);
}
}
void fb(char x)
{
char j;
if(x < 0)
{
cw2 = 0;
x= -x;
}
else
cw2 = 1;
for(j = 1; j <= x; j ++)
{
cp2 = 0;
delay(1000);
cp2 = 1;
delay(1000);
}
}
我的就是用圆的公式做的,分1/4画,画4次。 这个好像是05年还是03年的国家赛的题目,画圆,寻迹,我在06年训练的时候做过。呵呵!老师说达到国家奖的水平了,当时我只知道所有功能实现并超标 谢谢啦,爽歪歪 只要把画点的功能完美实现其它功能就简单了。
画圆的时候一定要注意两个电机同步的问题,同时开始,同时结束。这样才画的更圆。 哈哈.我现在做的自动点胶机就是控制X,Y移动台自动画圆.我只要给它半径,它就会从圆心开始画一个圆面给我.这个难点只是在X,Y坐标的运算上面而已.
页:
[1]