鱼C论坛

 找回密码
 立即注册
查看: 6350|回复: 11

[技术交流] 求救!!Delphi7程序编写矩形板材切割成一个个小矩形件

[复制链接]
发表于 2015-5-23 18:52:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
       问题描述:板材(原材料)为矩形件,现在有一个约束条件,考虑到公差(间隙),将大小为L*W的板材切割时处理为(L+2r)*(W+2r)来进行切割,要切割的矩形件(尺寸为l*w)处理为(l+2r)*(w+2r),其中r为间隙(即,公差)。如下图一所示,进行处理。这样就可以将公差约束条件下的板材切割问题转化为无约束条件下的板材切割问题,相当于在(L+2r)×(W+2r)的矩形板材上切割尺寸为(l+2r)×(w+2r)的矩形件。
      界面如下:就是可以输入板材长宽,要切割成的板材长宽,还可以输入公差。在点击开始计算后,可以求出并显示出排列的最大毛坯数,板材利用率来。还可以生成排样图,如下:
     要用动态规划算法实现,我这里有参考代码,
function Fl(x,y,a,b:integer;f:Tsty):integer; //动态规划算法及递归算法排样的主函数
var
 ax,ay,i,j,qx,qy,k:integer; q:Tsty;

begin
ax:=0;ay:=0;i:=0;j:=0;qx:=0;qy:=0;k:=0;
setlength(f,(x+1),(y+1));//数组f[][]用于记录板材状态
setlength(q,(x+1),(y+1));//数组q[][]用于记录拼接上的条带状态
for i:=0 to x do
  begin
  for j:=0 to y do
  f[i][j]:=0;
  end;
for i:=0 to x do
  begin
  for j:=0 to y do
  q[i][j]:=0;
  end;
for i:=b to x do//二次循环基于动态规划算法,求取板材每个状态拼接条带的决策
  begin
  for j:=b to y do
    begin
    if(j>=a) then
    ax:=f[i][j-a]+(i div b);
    if(i>=a) then
    ay:=f[i-a][j]+(j div b);
    f[i][j]:=Max(ax,ay);
    if ax>ay then
    q[i][j]:=1;
    end;
  end;
  i:=x;j:=y;
  while (i>=b) and (j>=b) do//递归算法基于最优性原理,逆序递归出切割决策
  begin
  if (q[i][j]=1) and (j>=a)  then
     j:=j-a;
  if (q[i][j]=0) and (i>=a) then
     i:=i-a;
  end;
result:=f[x][y];//返回板材的最终状态
end;
但是我不知道这个函数要添加在哪里,编译出来老是有错误,而且不知道如何画出排样图。
求各位大神帮忙看看,急急急急急!!!!感激不尽~~~~~
图1.png
捕获.JPG
图片1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-5-23 18:56:27 | 显示全部楼层
Delphi7画排样图好像是用canvas,表示不太会呀。。。。。求各位大神帮忙看下程序。上边这个动态规划算法的函数添加到哪里,怎么出来排样图,类似于上边这样的排样效果图,就是根据输入数据后的计算结果生成的矩形件切割的排样图。谢谢大家了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-23 20:04:19 | 显示全部楼层
q:Tsty
Tsty沒用過 不知道是哪個物件,可以說明是什麼物件嗎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-23 20:06:56 | 显示全部楼层
亲,我也不知道他是啥呀。我在做一个题目,这个动态规划算法是几年前和我题目类似的学姐的程序,用这个函数时,也是提示说这个Tsty没定义啥的。。。。唉。。。。苦恼的很。主要就是题目要求用动态规划算法来解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-23 20:26:36 | 显示全部楼层
我伟大的亲们,就是这个系统的界面我已经做好了,就是差动态规划的计算方法了,计算板材的切割方案,并且生成排样效果图,类似上边那个那种排样图。拜托大家帮忙看看了,谢谢~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-23 22:36:14 | 显示全部楼层
额。。。帖子顶起来~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-25 00:47:45 | 显示全部楼层
求救~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-5-25 20:35:13 | 显示全部楼层
bowk 发表于 2015-5-23 20:04
q:Tsty
Tsty沒用過 不知道是哪個物件,可以說明是什麼物件嗎

是一个数组。现在程序修正过了,可以运行了。就是不知道怎么出来排样效果图。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-28 21:35:57 | 显示全部楼层
form.cavas.pixel(x,y):=255;
可以針對form上的 pixel改變顏色
利用這個就可以將x,y對應pixel畫圖形看看
也可以將你的代碼上傳六,日找時間研究站看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-28 22:57:38 | 显示全部楼层
亲,没有看懂呀。
   用canvas怎么画出上边似得那种排样图呢?据说不用知道每个小矩形的四个点就行,就是在画直线。唉。。。还是不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-29 20:56:12 | 显示全部楼层
嘎嘣脆 发表于 2015-5-28 22:57
亲,没有看懂呀。
   用canvas怎么画出上边似得那种排样图呢?据说不用知道每个小矩形的四个点就行,就是 ...

以pixel點為條件再來畫圖形這是我想到,不過程式是你寫的你可能更了解裡面的X,Y,將完整代碼上傳比較好研究~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-29 19:21:22 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表