| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 288 人关注过本帖
标题:程序有些小问题 求指教
取消只看楼主 加入收藏
前途汗颜
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-6-8
收藏
 问题点数:0 回复次数:0 
程序有些小问题 求指教
我编的圆弧逼近插补程序模拟刀具的运动轨迹 输入的是圆心坐标 起点坐标 终点坐标 顺时针或逆时针 输入后以圆心为原点建立新坐标系 输出刀具没走一步的坐标 分为四个象限 顺时针和逆时针两个方向
比如 圆心 0,0
起点 0,4
终点 4,0
顺时针 1
步数  坐标
1     0,3
2     1,3
3     2,3
4     3,3
5     3,2
6     4,2
7     4,1
8     4,0
我编的程序如下 求指教
#include "stdio.h"
#include "math.h"
int X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4;
int r,f,s;
void main()
{
 int m;
 int menu();   
 void yishun();   
 void yini();
 void ershun();   
 void erni();
 void sanshun();   
 void sanni();
 void sishun();   
 void sini();
 void shuchu();
 m=menu();
 
 switch(m)
 {
  case 1:yishun();shuchu();break;
  case 2:yini();shuchu();break;
  case 3:ershun();shuchu();break;
  case 4:yini();shuchu();break;
  case 5:sanshun();shuchu();break;
  case 6:yini();shuchu();break;
  case 7:sishun();shuchu();break;
  case 8:yini();shuchu();break;
  default:printf("无法插补\n");
 }
}
int menu()
 {
  int t;
  printf("输入原点坐标\n");
  scanf("%d,%d",&X0,&Y0);   
  printf("输入起点坐标\n");
  scanf("%d,%d",&X3,&Y3);
  printf("输入终点坐标\n");
  scanf("%d,%d",&X4,&Y4);
  printf("1:顺时针圆弧\n");
  printf("2:逆时针圆弧\n");
  scanf("%d",&s);
  X1=X3-X0;
  Y1=Y3-Y0;
  X2=X4-X0;
  Y2=Y4-Y0;
  r=X1*X1+Y1*Y1;   
  if (X1>=0&&Y1>=0&&s==1)
     t=1;
  else if (X1>=0&&Y1>=0&&s==2)
     t=2;
  else if (X1<0&&Y1>0&&s==1)
     t=3;
  else if (X1<0&&Y1>0&&s==2)
     t=4;   
  else if (X1<0&&Y1<=0&&s==1)     
       t=5;
  else if (X1<0&&Y1<=0&&s==2)     
       t=6;     
  else if (X1>=0&&Y1<0&&s==1)
        t=7;
  else if (X1>=0&&Y1<0&&s==2)
        t=8;
  else
     t=9;
     return(t);
 }
void yishun()
{
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
   {
       if(f>=0)
    {
      Y1--;
    f-=2*Y1+1;
    }
    else
    {
     X1++;
     f+=2*X1+1;
     }
 
   }
}  
void yini()
{
   
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
      if(f>=0)
   {
      X1--;
    f-=2*X1+1;
   }
   else
    {
     Y1++;
     f+=2*Y1+1;
    }
   
  }
}
void ershun()
{
     
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      X1++;
    f+=2*X1+1;
    }
   else
    {
     Y1++;
     f+=2*Y1+1;
    }
  
  }
}
void erni()
{
 
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      Y1--;
    f-=2*Y1+1;
    }
   else
    {
     X1--;
     f-=2*X1+1;
    }
 
  }
}  
void sanshun()
{
   
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      Y1++;
    f+=2*Y1+1;
    }
   else
    {
     X1--;
     f-=2*X1+1;
    }
  
  }
}  
void sanni()
{
     
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      X1++;
    f+=2*X1+1;
    }
   else
    {
     Y1--;
     f+=2*Y1+1;
    }
  
  }
}  
void sishun()
{
 
  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      X1--;
    f-=2*X1+1;
    }
   else
    {
     Y1--;
     f-=2*Y1+1;
    }
  
  }
}  
void sini()
{

  f=X1*X1+Y1*Y1-r;
  while(X2!=X1||Y2!=Y1)   
  {
   if(f>=0)
    {
      Y1++;
    f+=2*Y1+1;
    }
   else
    {
     X1++;
     f+=2*X1+1;
    }
  
  }
}  
void shuchu()
 {
     int i=1;
     while(X2!=X1||Y2!=Y1)
     {
         printf("%d    ",i);
        printf("%d,%d\n",X1,Y1);
     }
     i++;
 }
     
2013-06-08 20:07
快速回复:程序有些小问题 求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021339 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved