【电机绘图】:插补算法(一)—直线插补—逐点比较法

news2024/11/24 16:57:12

今日介绍学习一种使用电机作画、绘图、加工零件时需要使用的算法 : 插补算法

本文提供直线插补的概念基础,基本思路分析,C语言实现等,代码会直接贴出!

插补算法是指在数值计算或数据处理中,根据已有的数据点或采样点,推断出未知数据点或采样点的值的方法。

插补算法可以通过已知数据点之间的关系来填补数据间的空缺或缺失值,从而恢复完整的数据。

在图像处理、信号处理、曲线拟合等领域中,插补算法被广泛应用。

常见的插补算法有线性插值、最邻近插值、多项式插值和样条插值等。插补算法可以帮助我们填补数据缺失的部分,从而更好地分析和处理数据。

目录

概念引入--优化的拟合直线:

直线插补—逐点比较法公式:

 进给情况一:在第一象限的进给与插补

 进给情况二:在第二象限的进给与插补

逐点比较法的总结:

直线插补—逐点比较法 的C实现:

效果展示:

 代码给出:

结束语:


概念引入--优化的拟合直线:

如图:这有一条直线需要我们进行弥合绘制,它的起点是原点(0,0),终点目标是A(6,4)

 我们很容易想到:

因为它的俩个端点固定,因此在数学计算关系式上,我们对其进行补足时,只需计算其斜率:

k=(4-0)/  (6-0)  =  2/3  ;然后将这个运算关系带入电机控制移动,X走一格时,Y同时走2/3,

直到到达点A即可~~

但现实却不会这样:

如果我们的机械电机设计精度远大于这个需求长度分度要求,我们可以尝试使用这个求斜率的办法去弥合绘制该曲线,但实际与理论相悖,

在微观层面,计算机与加工电机或者加工刀具是无法做到如此精准的绘制与定位的,在加工的时候,不同的产品有各式各样的形状。计算机对其直线上每个点的定位,在微观上总是不准确的:

简单的形状,可以轻松的实现。如位置点,只需要确定xy位置,电机运动到xy点上,就能够加工成功。

但是对于比较复杂的形状,此时如果我们去考虑它所有的运行轨迹,所有的运动位置点,这样会非常复杂,计算机的工作量也会大大的增加。

因此在实际应用中,对于复杂的形状,我们无法精确地确定每个点的位置,而是通过数据密化,尽可能的去拟合它真实的形状,通过这种方式,不仅能在达到精度要求的前提下,还能够大大减小计算机的工作量,这就是“插补”。

 下图即是对插补的理解画法:

其中我们需要抽离三个概念:

1.理论直线轨迹(肉眼轨迹)                   ——粉色直线

2.实际运行轨迹(机械轨迹)                   ——棕色折线

3.实际给进点情况(X、Y机械运行步骤)——红色箭头

                                                                (向上向下是给Y,向做向右是进给X)

 我们从此图可以看出,这种对于不是45度角度斜率的直线的弥合,我们并不是每次只需,X进1,Y进1就可了,而是有某些部分是需要多进给的,就比如此图,它就在(3,2)后又在此多进给了X一次,以达到对于2/3这个斜率的更佳弥合~~

直线插补—逐点比较法公式:

以下公式是指源于旧的基础上进行运算得出新的F值:

F  =  F  -   |Ye|           (F>=0)

F  =  F  +  |Xe|           (F < 0 )

 

 进给情况一:在第一象限的进给与插补

我们直接看到之前的题目:它在第一象限,看看如何理解使用这个公式:

F>=0      表示只能在X坐标上进给

F<0        表示只能在Y坐标上进给

首先我们需要初始化一些数据,它们的值与运算关系如下:

F=0;

E=|Ax|+|Ay|     (终点判断,大小与目标点的横纵坐标有关)

在插补过程中每走一步要完成以下4个工作节拍。

①偏差判别   ——

判别当前动点偏离理论曲线的位置(即F旧)。这是有基础公式的

②进给控制   ——

确定进给坐标及进给方向。这是需要根据终点象限不同,而有所变化的,有的象限进给X表示在X轴加一,有的象限则是在X轴减一

③新偏差计算 ——

迸给后动点到达新位置,计算出新偏差值(即F新),作为下一步判别的依据。

④终点判别    ——

查询一次,终点是否到达。

   步数

(一共是E)

偏差判断

(F旧)

坐标进给

(X或Y:

注意象限)

坐标

(X,Y)

偏差计算

(F新)

终点判断 E
0(0,0)F(0,0)=010
1F(0,0)=0+X(1,0)

F(1,0)=0-4

=-4

9
2F(1,0)=-4+Y(1,1)F(1,1)=-4+6=28
3F(1,1)>0+X(2,1)F(2,1)=2-4=-27
4F(2,1)<0+Y(2,2)F(2,2)=-2+6=46
5F(2,2)>0+X(3,2)F(3,2)=4-4=05
6F(3,2)=0+X(4,2)F(4,2)=0-4=-44
7F(4,2)<0+Y(4,3)F(4,3)=-4+6=23
8F(4,3)>0+X(5,3)F(5,3)=2-4=-22
9F(5,3)<0+Y(5,4)F(5,4)=-2+6=41
10F(5,4)>0+X(6,4)F(6,4)=4-4=00

这样,在编写绘图程序的时候,只需这样一次一次安排好下次插补直线的终点坐标,便可以自己设计,绘制各种各样的复杂形状:

 

 

 进给情况二:在第二象限的进给与插补

 这次,我们的情况有所改变,不仅目标变为了第二象限的点(-4,3),起点也变为(0.1),而插补计算肯定是要从原点(0,0)开始的,此时,该如何安排电机的运作呢?

 其实,我们这里就要分为俩个步骤:

1.移动到新起点

2.计算新终点的坐标

 此处我们肯定希望起点还是原点(0,0)的,因此在电机运动的程序设计上,可以使其先移动到(0,1)后开始插补绘制,为保持斜率不变,新的A点坐标也要随之改变为(-4,2)。

第二象限,乃至其余象限,直线插补的公式不会改变,但是进给X、Y时的加减是会改变的,

比如此处的插补,终点坐标经过我们修改后是(-4,2),由此终点坐标判断可得出:

在X轴的进给变为负的,在Y轴方向的进给仍是正的 原理就是判断终点坐标的正负即可

 

下面我们继续绘制图表来帮助理解过程:

   步数

(一共是E)

偏差判断

(F旧)

坐标进给

(X或Y:

注意象限)

坐标

(X,Y)

偏差计算

(F新)

终点判断 E
0(0,0)F(0,0)=06
1F(0,0)=0-X(-1,0)F(-1,0)=0-2=-25
2F(-1,0)<0+Y(-1,1)F(-1,1)=-2+4=24
3F(-1,1)>0-X(-2,1)F(-2,1)=2-2=03
4F(-2,1)=0-X(-3,1)F(-3,1)=0-2=-22
5F(-3,1)<0+Y(-3,2)F(-3,2)=-2+4=21
6F(-3,2)>0-X(-4,2)F(-4,2)=2-2=00

最终弥合效果如下图:

 

逐点比较法的总结:

这是我从网上盗的图,可以看看归纳,帮助理解 :

 

直线插补—逐点比较法 的C实现:

这里展示我编写的C代码,它使用逐点比较法实现了各个象限的直线插补,只需输入目标点的坐标,就会自动识别在哪个象限,并且会打印输出每一步的过程坐标,

效果展示:

 代码给出:

#include "stdio.h"
#include "math.h"


//需要终点坐标差补 
void Straight_Line_Interpolation(int x,int y);


int main(void)
{
	Straight_Line_Interpolation(6,4);
}

//直线差补算法 
//需要终点坐标差补 
void Straight_Line_Interpolation(int x,int y)
{
    //当前点坐标
	int draw[2]={0,0};

	//E:终点判断 
	//F:偏差计算 
	//i:当前插补步数(最终要等于E) 

	int E,F,i;
	E=abs(x)+abs(y);
	F=0;
	
//循环次数就是E决定的
	for(i=0;i<E;i++)
	{

       //先判断偏差F,决定进给X还是Y
      if(F>=0) 
	  {
        //再根据判断终点X,Y在哪个象限,决定进给情况
	  	if(x>0)        {draw[0]+=1;}
		else if(x<0)   {draw[0]-=1;}		 

        //计算本次产生的新的偏差F 
	     F=F-abs(y);
	     printf("(%d,%d)\r\n", draw[0], draw[1]);
	  }

       //先判断偏差F,决定进给X还是Y
	  else if(F<0) 
	  {
        //再根据判断终点X,Y在哪个象限,决定进给情况
	  	if(y>0)       {draw[1]+=1;} 
		else if(y<0)  { draw[1]-=1; }

        //计算本次产生的新的偏差F 
	   	F=F+abs(x);
	    printf("(%d,%d)\r\n", draw[0], draw[1]);	
   	
	   }
	}
}

结束语:

最后希望这篇文章对大家有用,喜欢可以三连支持一下~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/846643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境利用QT+CMake编译mingw版本的opencv

Opencv官网没有提供mingw版本的opencv库&#xff0c;所以需要自己编译&#xff0c;下面是编译过程&#xff0c;32位64位方法类似。 可以直接下载编译好的mingw版本opencv4.4&#xff1a; 使用CMAKE3.22QT5.13编译后的opencv4.4&#xff08;32位的&#xff09;资源-CSDN文库 …

【win10专业版远程控制】 自带远程桌面公司内网电脑

使用win10专业版自带远程桌面公司内网电脑 文章目录 使用win10专业版自带远程桌面公司内网电脑 在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数…

Nginx环境搭建、docker安装

1.Nginx安装 1&#xff09;首先创建Nginx的目录并进入 [rootlucky ~]# mkdir /soft && mkdir /soft/nginx/ [rootlucky ~]# cd /soft/nginx/ [rootlucky nginx]# 2&#xff09;下载Nginx的安装包&#xff0c;可以通过FTP工具上传离线环境包&#xff0c;也可通过wget命…

数据标注对新零售的意义及人工智能在新零售领域的应用?

数据标签对于新零售至关重要&#xff0c;因为它构成了训练和部署人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;模型的基础。在新零售的背景下&#xff0c;数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后&#xff0c;这些…

手把手写深度学习(20):搭建LLM大语言模型的敏感词过滤系统

前言:随着Llama 2、通义千问7B等越来越多的大语言模型开源,开发者们可以基于这些开源的模型搭建自己的对话系统、Agent等。但是因为我们的国情,需要开发者对这些模型进行一些特殊的“安全性”考虑,保证与用户的交互不会出现“有害信息”。这篇博客手把手教大家搭建一个大语…

效率利器之事件委托

前言 公司产品部推出了一款新产品&#xff0c;经理指派小A负责推广工作。小A通过多方打听了解到推广流程&#xff0c;需要使用公司证件在几个平台注册账号&#xff0c;并经过多轮审批。小A经历了一番操作后感到身心俱疲&#xff0c;最终成功将产品发布到公众平台上。 与此同时…

GB:重测序+转录2023经典文章,一篇就够

在三代测序崛起的现在&#xff0c;HiFi Reads以其超长读长&#xff0c;高准确率及灵敏度、GC偏向性小、无PCR偏向性等特色优势在动植物基因组、微生态领域等研究中正崭露头角&#xff0c;成为组学研究技术的新热门。高品质的HiFi Reads成为攻克动植物基因组组装难点的有力助推&…

SNAP插件sen2Three去云操作

1.先把这篇文章看了 2.去官网下载Sen2Three 3.这时候可以大概看看Sen2Three的官方文档&#xff0c;我们知道了需要用anaconda2环境 4.我是已经安装有anaconda3,所以需要两个并存&#xff0c;此时可以参考这篇文章 5.这是ananconda2的链接&#xff0c;直接下载安装即可&#xff…

南卡签约游泳冠军傅园慧,创造防水运动耳机的新天花板!

近日&#xff0c;国内骨传导运动耳机龙头品牌NANK南卡&#xff0c;正式官宣知名游泳冠军傅园慧出任品牌形象大使。在此之外&#xff0c;南卡品牌方还特邀了同样作为游泳冠军的孙杨&#xff0c;以及知名演员张新成、流行歌手段奥娟等多位明星来体验旗下的运动耳机&#xff0c;皆…

Python中搭建IP代理池的妙招

在Python的爬虫世界里&#xff0c;你是否也想搭建一个功能强大的IP代理池&#xff0c;让你的爬虫无忧无虑地畅游各大网站&#xff1f;今天&#xff0c;我就来教你使用Scrapy框架搭建IP代理池&#xff0c;让你的爬虫更加智能、高效&#xff01;跟着我一步一步来&#xff0c;轻松…

天津最新python培训班就业形势 python能就业吗?

小编认为Python是一门非常适合学习的编程语言&#xff0c;无论性别如何。它易于学习、功能强大&#xff0c;并且在各个领域都有广泛的应用&#xff0c;因此&#xff0c;性别不应该成为学习Python的障碍&#xff0c;那么学习Python是否就能找到满意的工作呢&#xff1f; 这是一…

PyTorch深度学习实战(10)——过拟合及其解决方法

PyTorch深度学习实战&#xff08;10&#xff09;——过拟合及其解决方法 0. 前言1. 过拟合基本概念2. 添加 Dropout 解决过拟合3. 使用正则化解决过拟合3.1 L1 正则化3.2 L2 正则化 4. 学习率衰减小结系列链接 0. 前言 过拟合 (Overfitting) 是指在机器学习中&#xff0c;模型…

问题解决方案

前端开发 1、npm安装的时候老是卡住 reify:rxjs: timing reifyNode:node_modules/vue/cli/node_modules 查看当前使用的那个镜像 nrm lsnpm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/cnpm --------- https://r.cnpmjs.org/taobao …

推荐系统工作小结

最初的构想 由于我们的技术团队中并没有人真正用大数据的方法做过推荐系统。所以我们定的步骤是先解决有没有的问题。然后再持续地进行效果优化的工作。 现状 但一方面考虑到要快速上线。另一方面也希望对推荐系统的效果有一个合理的参照。我们打算先使用达观数据的推荐系统云…

无涯教程-Perl - endpwent函数

描述 此功能告诉系统您不再希望使用getpwent从密码文件读取条目。在Windows下,使用Win32API::Net函数从域服务器获取信息。 语法 以下是此函数的简单语法- endpwent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile(($name, $pas…

不知道ai绘画工具有哪些?那就赶紧把这些AI绘画工具收藏下来

近年来&#xff0c;AI技术的发展很快&#xff0c;在很多领域都取得了新的进展&#xff0c;这其中也包括了绘画领域。 最近&#xff0c;我看到了几幅用AI生成的图片&#xff0c;被深深地吸引住了。 所以&#xff0c;我就去找了几个AI绘画工具尝试制作AI图片。 尝试完之后发现…

论文解读|使用深度卷积网络的图像超分辨率

原创 | 文 BFT机器人 论文标题&#xff1a;Image Super-Resolution Using Deep Convolutional Networks 网址&#xff1a;https://arxiv.org/abs/1501.00092 代码&#xff1a;https://github.com/Edwardlzy/SRCNN 01 摘要 提出了一种单幅图像超分辨率&#xff08;SR&#x…

docker菜谱

DockerHub&#xff1a;https://hub.docker.com/ 记录docker常用软件安装&#xff0c;欢迎大家投稿。&#x1f60e;&#x1f60e;&#x1f60e; 文章目录 1. Redis 1. Redis 1、下载redis镜像&#xff1a; docker pull redis:6.2.8 docker pull redis:7.0.02、启动容器&#x…

python入门篇01- 安装python必备环境和helloworld书写

目录 1. 前言简介 1.1 python简介: 1.1.1 Python是一种高级编程语言&#xff0c; 1.1.2 Python的命名是受到了英国喜剧团体Monty Python的启发。 1.1.3从1990年开始&#xff0c;Python获得了一些用户 1.2 python与java的区别 2. python书写helloworld 2.1 安装pytho…

pytorch求导

pytorch求导的初步认识 requires_grad tensor(data, dtypeNone, deviceNone, requires_gradFalse)requires_grad是torch.tensor类的一个属性。如果设置为True&#xff0c;它会告诉PyTorch跟踪对该张量的操作&#xff0c;允许在反向传播期间计算梯度。 x.requires_grad 判…