移动碰撞法 ——套料排版算法——CAD c#

套料排版算法中,关键的一步是碰撞检测,当两个多边形碰撞时停止继续移动,进行下一个轨迹运动。

给定两个多边形,固定其中一个,让另一个多边形围绕它作不旋转的刚体运动。在运动过程中,始终保证两个多边形边界上至少有一点互相靠接,且不重叠。这就使得参考点只能在固定多边形的某一侧特定区域内运动。

例如,在二维排料场景中,为了判断待排料工件与已排料工件是否相交,会计算待排料工件相对于已排料工件的临界多边形。待排料工件只能在已排料工件的外部边缘滑动,其参考点形成的临界多边形也就只会在已排料工件的外侧,不会在其内部或两侧同时出现偏移。

移动碰撞法:首先根据多边形 A 和 B 当前时刻的靠接状态,得到 B 下一步的移动方向,计算出 A 和 B 之间的最小碰撞距离,从而得到移动距离,将 B 移动到新的位置,重复以上过程。

目前移动碰撞(基于CAD C#)算法实现的效果如下:

目前实现的效果:分别让B从A的右、上、左、下四个方向进行碰撞检测,当碰撞时停下,继续下一个轨迹。

局部代码如下:

复制代码
 public void 两个零件排版4方向()
 {
     Database db = HostApplicationServices.WorkingDatabase;
     Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

     // 选择两个零件曲线
     var curveA = db.SelectCurve("\n请选择零件(A):");
     if (curveA == null) return;

     var curveB = db.SelectCurve("\n请选择零件(B):");
     if (curveB == null) return;

     // 排版方向参数(0=右, 1=上, 2=左, 3=下)
     int direction = 0; // 默认从右侧开始排版,逆时针一周
     bool allDirections = true; // 是否执行所有方向的排版

     Timing tt = new Timing();//开始计时
     Flash flashBHorizontal = null; // 瞬态显示对象

//**********省略部分代码
 }

算法需求联系↓↓↓(不免费)

相关推荐
Elias不吃糖1 天前
LeetCode每日一练(3)
c++·算法·leetcode
小龙报1 天前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio
艾莉丝努力练剑1 天前
【优选算法必刷100题】第031~32题(前缀和算法):连续数组、矩阵区域和
大数据·人工智能·线性代数·算法·矩阵·二维前缀和
醉颜凉1 天前
环形房屋如何 “安全劫舍”?动态规划解题逻辑与技巧
c语言·算法·动态规划
大雨淅淅1 天前
一文搞懂动态规划:从入门到精通
算法·动态规划
不去幼儿园1 天前
【启发式算法】灰狼优化算法(Grey Wolf Optimizer, GWO)详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法
随意起个昵称1 天前
【二分】洛谷P2920,P2985做题小记
c++·算法
没书读了1 天前
计算机组成原理-考前记忆清单
线性代数·算法
Hcoco_me1 天前
大模型面试题5:矩阵(M*M)特征值分解的步骤
算法·机器学习·矩阵
非著名架构师1 天前
极端天气下的供应链韧性:制造企业如何构建气象风险防御体系
大数据·人工智能·算法·制造·疾风气象大模型·风光功率预测