如何用PLC计算任意多边形的面积:“鞋带算法”!

百科   2024-09-02 07:00   山东  

 

文章来自:

曾经遇到过一个项目,研发一种高端家具设备:家具设计师给出坐标点,设备按照家具设计师给定的坐标轨迹避开树疤切割出任意多边形的木板并计算出多边形的面积。


例如按照如图所示的轨迹切割板材用于拼接:

一、设计需求分析


这里的要点有两个:1是避开树疤,2是计算多边形的面积。

讲到这里大家是不是认为很easy,只要通过视觉避开树疤利用齐次变换矩阵仿射变换成实际坐标发给PLC就可以了,面积计算通过视觉将像素面积转成实际面积也没有难点。


然而通过多边形顶点坐标计算出多边形面积这个需求是客户在项目接近完结时提出的,当时自己又刚入门不久,开发视觉软件时做的很简单,就单纯识别树疤比对图形后将多边形像素坐标转成实际坐标发送给PLC,没有加入计算面积的功能,重新开发、测试工期无法满足不说,自己心里也没底。


实际工况时,家具设计师脑洞大开拼接多边形图案更有可能是这样的:


那么有没有办法通过PLC来计算任意多边形的面积呢?这里大家可以停下来仔细思考一下。


二、设计算法

答案是有的,那就是“鞋带算法”。例如要计算下图坐标系中多边形的面积:

我们先将多边形顶点坐标逆时针依次从上向下排列,最后回到起点,然后将蓝色线连接的坐标相乘减去橙色线连接坐标的乘积,最后做和除2就成功得到了多边形的面积。“鞋带算法”是不是很形象。


算法原理

鞋带算法原理我们可以由三角形面积公式推导出来,一个三角形的面积我们可以看作是一个平行四边形面积的一半,这里的推导并不复杂,大家可自行脑补,这里不再赘述。


三、PLC的实现方法

第一步:创建两个不定长数组,并将多边形顶点XY坐标分别存入两个不定长数组中。

第二步:获取不定长数组具体长度。

第三步:for循环中获取鞋带乘积并计算多边形面积。


四、中国古代的应用

中国古代人们用 “推步聚顶法” 来计算 “妖田(不规则农田)”的面积,其方法是用步长测量出不规则多边形农田的顶点坐标进而计算出面积,这种“推步聚顶法”其实就是高斯“鞋带算法”。

另外鞋带算法可以进一步扩展用来推导三维多面体的体积。      

现在“鞋带算法“在计算机视觉、地图测绘、3D建模也有广泛应用。


五、公众号总结:应用与算法的结合,古与今的融通!一个字“牛”!

作者语:写在最后


随着各类可编程控制器的应用普及,数学算法在工程中的应用越来越重要,小到冒泡排序、二分查找,大到强化学习、深度学习,都离不开各类算法。大家沉浸其中,方知妙用无穷。

加入知识星球智能制造与自动化,加入会员可下载此公众号发布文章中的相关资料(行业报告、MES、数字化技术方案、自动化教程、自动化行业标准化资料VASS\SICAR\戴姆勒等、C#上位机开发、node-red开发、人工智能教程等)。

会员下载区

今天的文章,如果你感觉有价值,请记得一键三连:点赞加关注,留言,转发朋友圈,分享收藏,点击在看之后,一定记着加我个人微信:ZIDHXB。

往期精彩回顾




汽车行业Sicar控制标准资料有偿获取
博途PLC与FactoryIO联合仿真教程限时分享
PLC程序动态加密—分级催款可远程授权程序与授权软件分享
SIEMENS/西门子杯,六部十层电梯程序分享
FactoryIO与博途联合三色物料气缸分拣站程序分享
多台排水泵按累计运行时间切换和先启先停切换多模式控制PLC程序分享
倍福PLC视频教程及资料免费分享(36G)
三菱PLC编写的贪吃蛇与俄罗斯方块程序分享
库卡EthernetKRL备选软件包分享(版本V3.1.3)
精美博途Wincc界面程序模板分享
TIA_Portal_v18虚拟机分享
西门子博途V19全家桶与最新授权下载
大众VASS05标准Step7v5.5软件虚拟机分享
TIA_Portal_v19虚拟机分享
西门子SCL编程实例—扫雷游戏分享
西门子TIA博途软件入门到精通教程免费分享
西门子S7-1500博途PLC(基础+高级)视频教程分享
西门子TIA博途-SCL高级编程多套视频资料免费分享-限时删除
西门子TIA博途高级语言SCL视频资料分享
三菱FX3U系列plc精讲视频分享(40讲+240讲) 49GB
西门子smart200视频教程分享
两套西门子WinCC视频教程分享(9.5G)
PLC、触摸屏工控小游戏样例合集分享
EPLAN电气设计制图视频教程分享-限时删除
都有哪些好用电工仿真软件?学习电路图变得如此简
67本自动化书籍免费领取啦!!!
最新西门子授权工具EKB2022版分享
立体仓库穿梭车程序分享
威纶触摸屏视频教程(66讲)分享
博途TIA V16-V17全套软件与组件分享
标准化编程之-博途TIA程序设计编程规范
西门子SCL编程练习:排水泵根据运行时间先起先停控制
如何使用C#编写程序读写西门子PLC?
VASS标准—PLC安全程序架构讲解
VASS05标准—KUKA机器人培训课件
大众VASS_05标准——PLC程序架构
大众VASS05生画面遇到的问题总结
SEW_MOVIPRO变频器在VASS05标准中的应用
SEW_MOVIFIT变频器在VASS05标准中的应用
KUKA机器人高级编程(下)第3-4章(计时器\运动编程)
西门子博途SCL案例_仓储系统出料优先级控制程序实战练习
西门子TIA博途SCL高级教程—伺服V90速度控制
西门子TIA博途SCL高级教程—伺服V90定位控制
西门子TIA博途SCL高级视频教程—模拟量在工程中的应用
博途TIA Portal——SCL间接寻址PEEK和POKE指令的使用案例
西门子SCL高级语言教程—冒泡排序和选择排序
西门子SCL编程实例—字与位的转换Word_To_Bit
西门子博途WINCC脚本VBS教程4_脚本操作画面内对象的属性
如何使用C#编写程序读写西门子PLC?
C#上位机通过TCP/IP协议和KUKA机器人通讯
不外传的28条PLC编程规范及建议,赶紧收藏
win10家庭版安装西门子博途软件时提示“管理员已阻止你运行此应用”解决方法
西门子SCL编程-数据堆栈存储与操作在项目中的使用
博途实现程序动态加密—分级催款密钥授权管理系统程序实现
分享几个PROFINET网络故障诊断与分析案例
工控的面向对象编程
SiCar自动化标准平台架构
特斯拉EPLAN 电气图纸和结构标准
SICAR标准-VALVE_1_TO_8_3POS_FB夹具控制功能块
西门子PLC信号分析软件Winplc Analyzer 使用方法
PROFINET设备的GSD文件及其描述语言GSDML
大众标准VASS06软件环境设置
ABB机器人编程与应用中级篇
PLC编程算法—FIFO堆栈程序的实现
大众VASS06 项目库标准程序结构.
C#利用S7netplus读写西门子PLC数据
吉利KUKA_KRC4系列机器人现场应用规范和技术要求
TESLA特斯拉—PLC 逻辑编程规范
TESLA特斯拉—SCADA 设计规范
多台排水泵按累计运行时间切换和先启先停切换多模式控制PLC程序分享
西门子S7-200SMART编码器线速度测量算法
西门子S7-200SMART一阶RC低通滤波算法原理与实现
博途S7-1500SCL与FactoryIO仿真实现一阶RC低通滤波器皮带机速度平滑控制
Node-Red与ModbusTCP设备通信——写数据
Node-Red与ModbusTCP设备通信——读数据
大众汽车PLC-VASS05标准视频教程
你知道制造业10大系统集成:SCADA、MES、PLM、ERP、SCM、WMS、APS、QMS、CRM、EAM的关系吗?
西门子S7-300 SCL编程实现数组队列搜索、插入、删除、改动功能


智能制造与自动化
每天学习一点点,时间会给你一个不可思议的礼物。定期分享智能制造与自动化知识点,分享比收获更让人幸福。 智能制造、自动化、数字化、机器人、工业互联网 PLC\x5cMES\x5cSCADA\x5cEPLAN\x5c 西门子\x5c三菱\x5c施耐德\x5cKUKA\x5c
 最新文章