【续】关于玻璃拼接的算法逻辑

morliz子轩 2019-10-12 08:39:18
请见图:


前期版主大大给出了4块相同尺寸的玻璃拼接的方法,但如果出现上图源图中,有2块玻璃相同尺寸,出现多次时,就会产生BUG。
直接导致,1块玻璃直接拼成了1个BoxCount(木箱)
贴子链接:关于相同记录按条数进行拼接的问题
早期的问贴:求教:关于玻璃当长宽相同时有多条记录时,合并尺寸的方法?


实际上理想的需求是,相同尺寸的玻璃(宽、高相同),2块为1个箱子,不能超过2块。再相同的时候,再打成1个木箱。
如果尺寸没有成双的,就单独打1个箱子。以此依据而来……

请大神们不吝赐教,感谢!
...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2019-10-19
  • 打赏
  • 举报
回复
3、当出现2块以上相同尺寸时,比如3块,剩余单块的玻璃打成1个,也就是BoxCount =1 首要先考虑的是面积,再就是尺寸。
morliz子轩 2019-10-19
  • 打赏
  • 举报
回复
以下是完整数据源码:

if not object_id(N'Tempdb..#T') is null
	drop table #T
go
create table #T (BOMHeaderID int,Length decimal(10,2),Width decimal(10,2),SndQty decimal(10,2))
insert #T
select 5454,806,385,1.00 union ALL
select 5454,806,385,1.00 union ALL
select 5454,806,385,1.00 union ALL
select 5454,806,385,1.00 union ALL
select 5454,632,1272,1.00 union ALL
select 5454,806,1446,1.00 union ALL

select 6918,605,1322,1.00 union ALL
select 6918,605,1322,1.00 union ALL
select 6918,688,388,1.00 union ALL
select 6918,688,388,1.00 union ALL
select 6918,688,588,1.00 union ALL
select 6918,688,588,1.00 union ALL
select 6918,1055,1420,1.00

go
select *
	,(row_number() over (PARTITION BY BOMHeaderID order by Length)+1)/2 AS rn
	,rtrim(Width) +'x'+ rtrim(Length) AS Size
	,(Length * Width )/1000000 as Area 
from #T
数据源表图: 优先级条件处理是:(从上往下优先) 1、当面积Area 大于1.5 时,直接优先单独打包。也就是BoxCount =1 2、当长、宽尺寸相同时,2条块玻璃打成1个,也就是BoxCount =1
morliz子轩 2019-10-19
  • 打赏
  • 举报
回复
引用 2 楼 二月十六 的回复:
哥,这个测试代码,我发现一个问题。 当4块相同玻璃顺序是乱的,比如,第一条记录位置是1187*536时, rn的序列,就是错位的。 你可以试下 以下是我测试的结果:
纳尼刘君 2019-10-16
  • 打赏
  • 举报
回复
CREATE TABLE T ( id INT identity(1,1), headerid VARCHAR(10), length INT, width INT ) INSERT INTO T(headerid,length,width) VALUES (16915,632,1272), (16915,806,385), (16915,806,385), (16915,806,385), (16915,806,385), (16915,806,1446), (19616,605,1322), (19616,605,1322), (19616,688,588), (19616,688,588), (19616,688,588), (19616,688,588), (19616,688,588), (19616,688,588), (19617,1055,14203); INSERT INTO T(headerid,length,width) VALUES (19616,688,588) CREATE TABLE #temp ( id INT, headerid VARCHAR(10), length INT, width INT, num int ) insert into #temp select *,ROW_NUMBER() over(partition by headerid,length,width order by length) as num from T select id,headerid,length,width, (case when num%2=0 then CONVERT(varchar(100),length)+' x '+CONVERT(varchar(100),width) +' || ' +CONVERT(varchar(100),length)+' x '+CONVERT(varchar(100),width) else CONVERT(varchar(100),length)+' x '+CONVERT(varchar(100),width) end) as calculatedsize , (case when num%2=0 then 2 else 1 end) as snditemqty, 1 as boxcount from #temp a where num%2=0 or num=(select MAX(num) from #temp b where a.headerid=b.headerid and a.length=b.length and a.width=b.width)
二月十六 2019-10-14
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Length] int,[Width] INT,[Qty] decimal(18,2))
Insert #T
select 427,'1122',1.00 union ALL
select 427,'1122',1.00 union ALL
select 427,'1122',1.00 union ALL
select 427,'1122',1.00 union all
select 552,'536',1.00 union all
select 1187,'536',1.00 union all
select 552,'536',1.00
Go
--测试数据结束
;WITH cte AS (
Select *,(ROW_NUMBER()OVER(ORDER BY Length)+1)/2 AS rn ,RTRIM(Length)+'*'+RTRIM(Width) AS Size FROM #T
)
SELECT rn ,
STUFF(( SELECT '||' + cte.Size
FROM cte
WHERE rn = a.rn
FOR
XML PATH('')
), 1, 2, '') AS Size,
SUM(a.Qty) AS Num,
1 AS Count
FROM cte a
GROUP BY a.rn


morliz子轩 2019-10-14
  • 打赏
  • 举报
回复
没人帮我看下啊。。。我要顶起来 拜托大神帮忙研究一下吧
课程目的:OpenCV是应用非常广泛的开源视觉处理库,在图像处理、计算机视觉和自动驾驶中有着非常重要的作用。课程设计特色:(课程当前为第一期)1、C++与Python双语教学Python语言是在计算机视觉中应用最多的一种语言,在工作中,深度学习模型的训练基本上都是使用Python语言编写的训练代码。OpenCV在这个过程中用于图像的预处理(例如图像读取、数据增强)和后处理,还可以用于显示处理的结果,功能强大,使用方便。但是在功能的部署的时候,不管是部署在服务端还是PC端,开发语言基本上用的是C++,所以如何有效的使用OpenCV进行模型或者功能的部署尤为重要。C++语言应用的好坏,在面试中可以看出一个面试者的工程实践能力的强弱,两种语言的开发掌握好了可以使工作如虎添翼。2、全模块讲解我出版了一本图书《学习OpenCV4:基于Python的算法实战》,虽然这本书是写的基于Python的算法实战,但是实际上这本书有详细的介绍算法的C++接口,还有一些C++方向的案例,是以Python为主。图书出版的时候就想双语写作,只是限于篇幅没有成行。本课程不仅采用双语教学,更是对C++的每个模块都做讲解,我们知道,很多的书其实只讲imgproc,如果你翻开一本书图像的形态学运算和图像滤波都是作为独立章节讲解的,那么这本书基本上就可以确定是只是讲解了imgproc模块,但是其他的模块在工作中也有很重要的作用。例如:core模块定义了C++的基本数据结构和基本运算(如四则运算);highgui模块是可视化与交互的模块;feature2d是特征点与特征匹配相关算法所在的模块;ml是机器学习相关的模块;dnn是深度学习相关的模块,可以使用OpenCV进行深度学习模型的部署。这些是很多的书和课程都不会讲的。3、讲解细致本课程会从环境搭建开始讲解,环境搭建尤为重要。从我多年的授课经验总结来看,如果只是给了代码,很多的入门用户环境问题处理不好的话,后面的学习很难进行下去,甚至会丧失学习的信心。4、会讲解C++和Python的开发语法问题是入门用户的一大难关,特别是C++语言。大学只是教授了C语言相关的内容,C++很多同学只懂一点皮毛,所以写代码步履维艰,我们在讲解代码的过程中会顺带讲解C++和Python的内容。我们还会讲解编译相关知识,还有库的装载与链接,这些是学校里不会教的,目前也几乎没有课程讲解。5、讲师经验丰富我讲解过C++和OpenCV的多个课程,广受学员好评。我出版过两本图书《深度学习计算机视觉实战》和《学习OpenCV4》,两本书都是细致入微的讲解,主要针对的就是初学者,所以能够很好的处理课程的难易程度。6、讲义准备充分讲义准备的充分细致,标识清楚明确,重点和疑难点突出。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧