2016|1

18

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

补偿算法 [复制链接]

/*直线接直线*/ 
#include <stdio.h>
#include <math.h>
main()
{
float r,x0,y0,x1,y1,x2,y2,xl1,yl1,xl2,yl2,xs1,ys1,xs2,ys2,xs3,ys3;
int sng;
char g1[3];/*字符数组存储半径补偿命令*/
printf("input r:");
scanf("%f",&r);
printf("input G41 or G42:");
scanf("%s",g1);
printf("input x0,y0,x1,y1,x2,y2 Separated by commas:"/*用逗号隔开*/);
scanf("%f,%f,%f,%f,%f,%f",&x0,&y0,&x1,&y1,&x2,&y2);
if(g1[2]=='2')/*判断刀补方向*/
r=-r;
if(r>0) sng=1;
else sng=-1;
xl1=(x1-x0)/(sqrt(pow(x1-x0,2)+pow(y1-y0,2)));
yl1=(y1-y0)/(sqrt(pow(x1-x0,2)+pow(y1-y0,2)));
xl2=(x2-x1)/(sqrt(pow(x2-x1,2)+pow(y2-y1,2)));
yl2=(y2-y1)/(sqrt(pow(x2-x1,2)+pow(y2-y1,2)));

if((sng*(xl1*yl2-xl2*yl1))>=0)/*判断为缩短型*/
  {
   printf("type of Reduction!\n");/*提示缩短型*/
                         /*刀补建立*/
                         /*xs1=x1-ryl2;*/
                         /*ys1=y1+rxl2;*/
                         /*刀补撤销*/
                         /*xs1=x1-ryl1;*/
                         /*ys1=y1+rxl1;*/
   /*刀补的进行*/
   if((xl1*yl2-xl2*yl1)==0)/*特殊情况两直线共线转接角为180°*/
    {
     xs1=x1-r*yl1;  
     ys1=y1+r*xl1;
     printf("xs1=%.2f\nys1=%.2f",xs1,ys1);/*输出补偿转接点坐标*/
    }
   else
    {
     xs1=x1+((xl2-xl1)*r)/(xl1*yl2-xl2*yl1);
     ys1=y1+((yl2-yl1)*r)/(xl1*yl2-xl2*yl1);
     printf("xs1=%.2f\nys1=%.2f\n",xs1,ys1);/*输出补偿转接点坐标*/
    }
  }
else if(sng*((yl2*xl1-xl2*yl1))<0&&(yl2*yl1+xl2*xl1)>=0)/*判断为伸长型*/
  {
   printf("type of Elongation!\n");/*提示伸长型*/
                         /*刀补建立*/
                         /*xs1=x1-r*yl1;*/
                         /*ys1=y1+r*xl1;*/
                         /*xs2=x1+((xl2-xl1)*r)/(xl1*yl2-xl2*yl1);*/
                         /*ys2=y1+((yl2-yl1)*r)/(xl1*yl2-xl2*yl1);*/
                         /*刀补撤销*/
                         /*xs1=x1+((xl2-xl1)*r)/(xl1*yl2-xl2*yl1);*/
                         /*ys1=y1+((yl2-yl1)*r)/(xl1*yl2-xl2*yl1);*/
                         /*xs2=x1-r*yl2;*/
                         /*ys2=y1+r*xl2;*/
   /*刀补进行*/
   xs1=x1+((xl2-xl1)*r)/(xl1*yl2-xl2*yl1);
   ys1=y1+((yl2-yl1)*r)/(xl1*yl2-xl2*yl1);
   printf("xs1=%.2f\nys1=%.2f\n",xs1,ys1);/*输出补偿转接点坐标*/
  }
else if((sng*(yl2*xl1-xl2*yl1))<0&&(yl2*yl1+xl2*xl1)<0)/*判断为插入型*/
  {
   
   printf("type of Insertion!\n");/*提示插入型*/
                          /*刀补建立*/
                          /*xs1=x1-r*yl1;*/
                          /*ys1=y1+r*xl1;*/
                          /*xs2=x1-r*yl1+abs(r)*xl1;*/
                          /*ys2=y1+r*xl1+abs(r)*yl1;*/
                          /*xs3=x1-r*yl2-abs(r)*xl2;*/
                          /*ys3=y1+r*xl2-abs(r)*yl2;*/
                          /*刀补撤销*/
                          /*xs1=x1-r*yl1+abs(r)*xl1;*/
                          /*ys1=y1+r*xl1+abs(r)*yl1;*/
                          /*xs2=x1-r*yl2-abs(r)*xl2;*/
                          /*ys2=y1+r*xl2-abs(r)*yl2;*/
                          /*xs3=x1-r*yl2;*/
                          /*ys3=y1+r*xl2;*/
   /*刀补进行*/
   xs1=x1-r*yl1+(abs(r)*xl1);
   ys1=y1+r*xl1+(abs(r)*yl1);
   xs2=x1-r*yl2-(abs(r)*xl2);
   ys2=y1+r*xl2-(abs(r)*yl2);
   printf("xs1=%.2f\nys1=%.2f\nxs2=%.2f\nys2=%.2f\n",xs1,ys1,xs2,ys2);/*输出补偿转接点坐标*/
  }
}

此帖出自FPGA/CPLD论坛

最新回复

楼主,该补偿算法应用那个地方的?  详情 回复 发表于 2011-10-22 22:17
点赞 关注
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主,该补偿算法应用那个地方的?

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表