源文件:https://pan.baidu.com/s/17FQKqn3UaEPQHkmTcOXKOg

提取码:atb2

#include

#include

#include

#include

//运行时坐标结构体

typedef struct

{

float xCdt;

float yCdt;

}CdtNow_Struct;

//直线的逐点比较法的直线插补的坐标的结构体

typedef struct

{

float xCdt_Sat; //起点坐标

float yCdt_Sat;

float xCdt_Tgt; //终点坐标

float yCdt_Tgt;

float pulseEqu; //脉冲当量

}Line_Inter_Struct;

//圆弧的逐点比较法的直线插补的坐标的结构体

typedef struct

{

float xCdt_Sat; //起点坐标

float yCdt_Sat;

float xCdt_Tgt; //终点坐标

float yCdt_Tgt;

float radius; //半径

float pulseEqu; //脉冲当量

}Arc_Inter_Struct;

//函数函数名:Line_point_by_point_comparison_Interpolation的测试的数据

Line_Inter_Struct lineStructTest={0,0,-6,-4,1};

Arc_Inter_Struct arcStructTest={10,0,6,8,10,1};

void Line_point_by_point_comparison_Interpolation(Line_Inter_Struct lineInterStr);

void Arc_point_by_point_comparison_Interpolation(Arc_Inter_Struct arcInterStr);

int main()

{

// Line_point_by_point_comparison_Interpolation(lineStructTest);

Arc_point_by_point_comparison_Interpolation(arcStructTest);

return 0;

}

/*

* 参考书目:《机床数控技术》 主编:梅雪松 P96

* 日期:2019/04/07

* 作者:Twsa Liu

* 函数名:Line_point_by_point_comparison_Interpolation

* 功能描述:直线的逐点比较法的插补算法

* 参数:lineInterStruct,直线插补结构体数据

* 返回值:运行时的坐标的结构体

*/

void Line_point_by_point_comparison_Interpolation(Line_Inter_Struct lineInterStr)

{

//定义和初始化运行时坐标

CdtNow_Struct cdtNow={lineInterStr.xCdt_Sat,lineInterStr.yCdt_Sat};

float devt=cdtNow.xCdt*lineInterStr.yCdt_Tgt-cdtNow.yCdt*lineInterStr.xCdt_Tgt; //直线插补的偏差函数

float endJudge=fabs(lineInterStr.xCdt_Tgt-cdtNow.xCdt)+fabs(lineInterStr.yCdt_Tgt-cdtNow.yCdt);

while(endJudge>0) //z终点判断

{

//得到的新的坐标值

if(devt>=0){

//沿Xe方向走一步

if(lineInterStr.xCdt_Tgt>=0)

cdtNow.xCdt+=lineInterStr.pulseEqu;

else

cdtNow.xCdt-=lineInterStr.pulseEqu;

//yCdtnow=yCdtnow;

devt-=fabs(lineInterStr.yCdt_Tgt);

}

else{

//沿Ye方向走一步

//xCdtnow=xCdtnow;

if(lineInterStr.yCdt_Tgt>=0)

cdtNow.yCdt+=lineInterStr.pulseEqu;

else

cdtNow.yCdt-=lineInterStr.pulseEqu;

devt+=fabs(lineInterStr.xCdt_Tgt);

}

endJudge-=lineInterStr.pulseEqu;

}

}

/*

* 参考书目:《机床数控技术》 主编:梅雪松 P94

* 日期:2019/04/07

* 作者:Twsa Liu

* 函数名:Arc_point_by_point_comparison_Interpolation

* 功能描述:圆弧的逐点比较法的插补算法

* 参数:arcInterStr,圆弧擦布的结构体结构体数据

* 返回值:运行时的坐标的结构体

*/

void Arc_point_by_point_comparison_Interpolation(Arc_Inter_Struct arcInterStr)

{

//定义和初始化运行时坐标

CdtNow_Struct cdtNow={arcInterStr.xCdt_Sat,arcInterStr.yCdt_Sat};

//终点判断计数设置

float endJudge=fabs(arcInterStr.xCdt_Tgt-arcInterStr.xCdt_Sat)+fabs(arcInterStr.yCdt_Tgt-arcInterStr.yCdt_Sat);

//圆弧插补的偏差函数

float devt=cdtNow.xCdt*cdtNow.xCdt+cdtNow.yCdt*cdtNow.yCdt\

-arcInterStr.radius*arcInterStr.radius; //Fi=Xi^2+Yi^2-R^2

while(endJudge>0) //终点判断

{

// //顺圆插补,测试了第一个象限,其他象限还未测试

// if(devt>=0){

// devt+=arcInterStr.pulseEqu*arcInterStr.pulseEqu-2*cdtNow.yCdt*arcInterStr.pulseEqu; //新的偏差计算

// //cdtNow.xCdt=cdtNow.xCdt;

// cdtNow.yCdt-=arcInterStr.pulseEqu;

// }else{

// devt+=arcInterStr.pulseEqu*arcInterStr.pulseEqu+2*cdtNow.xCdt*arcInterStr.pulseEqu;

// cdtNow.xCdt+=arcInterStr.pulseEqu;

// //cdtNow.yCdt=cdtNow.yCdt;

// }

//逆圆插补

if(devt>=0){

devt+=arcInterStr.pulseEqu*arcInterStr.pulseEqu-2*cdtNow.xCdt*arcInterStr.pulseEqu; //新的偏差计算

//沿-Xe方向走一步

if(arcInterStr.xCdt_Tgt>=0)

cdtNow.xCdt-=arcInterStr.pulseEqu;

else

cdtNow.xCdt+=arcInterStr.pulseEqu;

//cdtNow.yCdt=cdtNow.yCdt;

}else{

devt+=arcInterStr.pulseEqu*arcInterStr.pulseEqu+2*cdtNow.yCdt*arcInterStr.pulseEqu; //计算新的偏差

//沿Ye方向走一步

//xCdtnow=xCdtnow;

if(arcInterStr.yCdt_Tgt>=0)

cdtNow.yCdt+=arcInterStr.pulseEqu;

else

cdtNow.yCdt-=arcInterStr.pulseEqu;

//cdtNow.xCdt=cdtNow.xCdt;

}

endJudge-=arcInterStr.pulseEqu;

} //最后应该是生成文档

}

圆弧插补程序c语言,用C语言写的简易的逐点比较法插补算法,包括直线逐点插补和圆弧插补...相关推荐

  1. cpu模拟器c语言实现_你写出来的C语言是这样调用硬件的!

    大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗? 网友北极 C语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言编译成汇编指令,CPU直接执行汇编指令.所以这个 ...

  2. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...

    TensorFlow作业代写.代做Python程序语言作业.代写github课程作业.Python实验作业代写 日期:2019-07-10 10:34 Python Practical Examine ...

  3. 用 Go 语言给 Lua/OpenResty 写扩展

    用 Go 语言给 Lua/OpenResty 写扩展 https://www.lbbniu.com/3477.html 背景 最近的一个lua项目中需要解析wbxml,WBXML是XML的二进制表示形 ...

  4. c语言中读和写的作用,C语言中对文件最基本的读取和写入函数

    C语言read()函数:读文件函数(由已打开的文件读取数据) 头文件: #include 定义函数: ssize_t read(intfd,void* buf,size_tcount); 函数说明:r ...

  5. 易语言 vb c 那个写的程序运行快,VB好还是易语言

    满意答案 Zack_gb 2014.07.10 采纳率:53%    等级:8 已帮助:413人 其实编程语言都差不多的.易语言显得更简单些.易语言与VB一样是事件驱动的语言.我们在写代码时显得比C\ ...

  6. 如何写一个C语言头文件,C语言头文件如何写?.doc

    C语言头文件如何写? 沃直植跑决争肾垮忧地留许腐榔锑舱黎徒礁锄税絮窟柑冀宴稼误萎蛛席脏衙鹏丢寇急院馋猎争城丫轨最懦患队巩并道嫉缘拉诵旭倘荫惭岩靛约瞥剑澳摈讶蕾沈蜜荧次侧抿两洛加悠馈射移淳敏凹肮复钡桑缮 ...

  7. c语言服务器制作,C语言写的简易实用的web服务器

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Apache在码农界是比较知名的,它也是目前最接地气.使用最广泛的Web服务器 ...

  8. C语言编程学习:写的秒速计算四则混合运算项目

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  9. c语言中的自己写的.h文件如何调用注意事项

    c语言中的自己写的.h文件如何调用注意事项 需要建立一个项目project,并把相关的.h .c .cpp文件建在这个项目下面. 需要注意引用时不同,例如 #include<stdio.h> ...

最新文章

  1. java foreach 原理_一不小心就让Java开发者踩坑的failfast是个什么鬼?
  2. 把ASCII码的字符串转为数字的16进制
  3. U3D游戏运行时资源是如何从AB中加载出来的
  4. C指针原理(3)-ATT汇编
  5. mac php oracle11g,Oracle11G函数整理
  6. 单片机、ARM与DSP对比
  7. 50多首经典的广播电台背景音乐推荐下载
  8. TensorFlow中tf.train.Saver类说明
  9. Queue Map 武魂融合技:MapQueue
  10. inkscape:图层
  11. 英语语音篇 - 特殊发音记录
  12. LTspice 电路仿真入门
  13. Typescript(一)
  14. 云计算与大数据 第14章 云仿真平台CloudSim习题
  15. 崔云php_崔云恒新书《我的家乡我的亲》将出版
  16. 计算机公式大小写,excel大写金额公式
  17. canvas将图片转成点阵
  18. PXE自动化安装CentOS 8
  19. 天将降大任于斯人,必先灭其QQ……后必过CPA也!
  20. EMQ 边缘消息服务器管理套件 EMQ X Storm 发

热门文章

  1. 3dsmax 2020保存后的文件不见了,试了好几次都这样。
  2. matlab 调幅频谱ifft,噪声干扰信号的matlab仿真.doc
  3. 大唐计算机PHB边缘计算模块赋能行业新未来,有效降低开发难度,减少研发成本
  4. [图床]各种神奇图片
  5. PythonFlash开发斗兽棋---2.网络基础
  6. Linux升级ca,Linux update CA certificates
  7. 盘点:144个免费学习网站,全网最全资源合集
  8. DSPE-Azobenzene-PEG-NH2,磷脂-偶氮苯-聚乙二醇-氨基
  9. 集群环境下定时任务保证只有一台服务器执行
  10. Java——list的四种遍历