求救!!Delphi7程序编写矩形板材切割成一个个小矩形件
问题描述:板材(原材料)为矩形件,现在有一个约束条件,考虑到公差(间隙),将大小为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:=0;
end;
for i:=0 to x do
begin
for j:=0 to y do
q:=0;
end;
for i:=b to x do//二次循环基于动态规划算法,求取板材每个状态拼接条带的决策
begin
for j:=b to y do
begin
if(j>=a) then
ax:=f+(i div b);
if(i>=a) then
ay:=f+(j div b);
f:=Max(ax,ay);
if ax>ay then
q:=1;
end;
end;
i:=x;j:=y;
while (i>=b) and (j>=b) do//递归算法基于最优性原理,逆序递归出切割决策
begin
if (q=1) and (j>=a)then
j:=j-a;
if (q=0) and (i>=a) then
i:=i-a;
end;
result:=f;//返回板材的最终状态
end;
但是我不知道这个函数要添加在哪里,编译出来老是有错误,而且不知道如何画出排样图。
求各位大神帮忙看看,急急急急急!!!!感激不尽~~~~~ Delphi7画排样图好像是用canvas,表示不太会呀。。。。。求各位大神帮忙看下程序。上边这个动态规划算法的函数添加到哪里,怎么出来排样图,类似于上边这样的排样效果图,就是根据输入数据后的计算结果生成的矩形件切割的排样图。谢谢大家了 q:Tsty
Tsty沒用過 不知道是哪個物件,可以說明是什麼物件嗎 亲,我也不知道他是啥呀。我在做一个题目,这个动态规划算法是几年前和我题目类似的学姐的程序,用这个函数时,也是提示说这个Tsty没定义啥的。。。。唉。。。。苦恼的很。主要就是题目要求用动态规划算法来解决 我伟大的亲们,就是这个系统的界面我已经做好了,就是差动态规划的计算方法了,计算板材的切割方案,并且生成排样效果图,类似上边那个那种排样图。拜托大家帮忙看看了,谢谢~~~~ 额。。。帖子顶起来~~~~ 求救~~~ bowk 发表于 2015-5-23 20:04
q:Tsty
Tsty沒用過 不知道是哪個物件,可以說明是什麼物件嗎
是一个数组。现在程序修正过了,可以运行了。就是不知道怎么出来排样效果图。。。。。。。 form.cavas.pixel(x,y):=255;
可以針對form上的 pixel改變顏色
利用這個就可以將x,y對應pixel畫圖形看看
也可以將你的代碼上傳六,日找時間研究站看 亲,没有看懂呀。
用canvas怎么画出上边似得那种排样图呢?据说不用知道每个小矩形的四个点就行,就是在画直线。唉。。。还是不理解 嘎嘣脆 发表于 2015-5-28 22:57
亲,没有看懂呀。
用canvas怎么画出上边似得那种排样图呢?据说不用知道每个小矩形的四个点就行,就是 ...
以pixel點為條件再來畫圖形這是我想到,不過程式是你寫的你可能更了解裡面的X,Y,將完整代碼上傳比較好研究~~ 1
页:
[1]