書籤    
鞋碼換算    
根號化簡    
梯形面積    
圓的計算    
扇形面積    
橢圓面積    
圓柱體積    
球的體積    
圓錐體積    
圓管體積    
年齡計算    
天數計算    
複利計算    
單利計算    
利息計算    
現值計算    
ROI 計算機    
IRR 計算機    
GDP 計算機    
ROAS 計算    
BMI 計算機    
BMR 計算機    
1RM 計算機    
進位轉換    
薪資換算    
油錢計算    
油耗計算    
坡度計算    
   新增
機率與隨機計算工具
獨立事件機率
獨立事件機率
兩事件機率反推
兩事件機率反推
重複試驗機率
重複試驗機率
條件機率與貝氏定理
條件機率與貝氏定理
期望值計算機
期望值計算機
二項分布計算機
二項分布計算機
排列組合計算
排列組合計算
環狀排列計算
環狀排列計算
重複組合計算
重複組合計算
亂數產生器
亂數產生器
平均與統計計算工具
平均數計算機
平均數計算機
眾數中位數計算
眾數中位數計算
標準差計算機
標準差計算機
四分位數計算機
四分位數計算機
次數分配表
次數分配表
相關係數計算機
相關係數計算機
常態分布機率
常態分布機率
z 分數計算機
z 分數計算機
信賴區間計算機
信賴區間計算機
樣本數計算機
樣本數計算機
捉放法與抽樣調查
捉放法與抽樣調查
p 值計算機
p 值計算機
比例與百分比計算工具
百分比計算機
百分比計算機
增減率計算機
增減率計算機
百分比差異
百分比差異
百分誤差計算機
百分誤差計算機
比例計算機
比例計算機
打折計算機
打折計算機
營業稅計算機
營業稅計算機
毛利率計算機
毛利率計算機
速度計算工具
速率計算機
速率計算機
密度與濃度計算工具
密度計算機
密度計算機
莫耳濃度計算機
莫耳濃度計算機
分子量/莫耳質量
分子量/莫耳質量
物理與電學計算工具
歐姆定律計算
歐姆定律計算
瓦數↔安培換算
瓦數↔安培換算
電阻色碼計算
電阻色碼計算
電壓降計算
電壓降計算
單位換算計算工具
坪↔平方公尺換算
坪↔平方公尺換算
重量單位換算
重量單位換算
鞋碼換算
鞋碼換算
整數與正負數計算工具
除法直式計算
除法直式計算
最小公倍數計算
最小公倍數計算
最大公因數計算
最大公因數計算
正負數計算機
正負數計算機
質因數分解
質因數分解
一次不定方程式
一次不定方程式
同餘與餘數計算
同餘與餘數計算
因數計算機
因數計算機
羅馬數字轉換
羅馬數字轉換
分數、小數與四捨五入計算工具
分數計算機
分數計算機
帶分數計算機
帶分數計算機
約分計算機
約分計算機
分數換小數
分數換小數
小數換分數
小數換分數
四捨五入計算機
四捨五入計算機
方程式與不等式計算工具
一元一次方程式
一元一次方程式
聯立方程式
聯立方程式
一元二次方程式
一元二次方程式
絕對值方程式
絕對值方程式
一元二次不等式
一元二次不等式
多項式與乘法展開計算工具
二項式定理
二項式定理
平方根與 n 次方根計算工具
根號化簡
根號化簡
開根號計算
開根號計算
指數與對數計算工具
次方計算機
次方計算機
對數計算機
對數計算機
常用對數與位數
常用對數與位數
科學記號換算
科學記號換算
科學記號運算
科學記號運算
半衰期計算機
半衰期計算機
複數計算工具
複數計算機
複數計算機
複數極式轉換
複數極式轉換
棣美弗定理
棣美弗定理
函數與圖形計算工具
直線斜率計算
直線斜率計算
一次函數計算機
一次函數計算機
正比反比計算機
正比反比計算機
二次函數 y=ax²
二次函數 y=ax²
兩點距離公式
兩點距離公式
空間兩點距離
空間兩點距離
內分點與外分點
內分點與外分點
點到直線的距離
點到直線的距離
經緯度距離計算
經緯度距離計算
配方法計算機
配方法計算機
圓方程式計算機
圓方程式計算機
圓錐曲線計算機
圓錐曲線計算機
極坐標轉換
極坐標轉換
數列計算工具
等差數列計算
等差數列計算
等比數列計算
等比數列計算
費氏數列計算
費氏數列計算
遞迴關係式計算
遞迴關係式計算
向量計算工具
向量計算機
向量計算機
向量外積計算
向量外積計算
矩陣計算工具
矩陣計算機
矩陣計算機
行列式計算機
行列式計算機
反矩陣計算
反矩陣計算
平面圖形計算工具
sin cos tan 計算
sin cos tan 計算
度與弧度換算
度與弧度換算
三角函數疊合
三角函數疊合
三角形計算機
三角形計算機
三角形面積計算
三角形面積計算
直角三角形計算
直角三角形計算
畢氏定理計算
畢氏定理計算
多邊形內角外角
多邊形內角外角
相似比與面積比
相似比與面積比
平行線與角
平行線與角
長方形面積
長方形面積
平行四邊形面積
平行四邊形面積
梯形面積
梯形面積
圓的計算
圓的計算
扇形面積
扇形面積
圓周角定理
圓周角定理
橢圓面積
橢圓面積
立體圖形計算工具
正方體體積
正方體體積
正方體表面積
正方體表面積
長方體體積
長方體體積
長方體表面積
長方體表面積
圓柱體積
圓柱體積
圓柱表面積
圓柱表面積
球的體積
球的體積
球的表面積
球的表面積
球冠的體積
球冠的體積
球冠的表面積
球冠的表面積
橢球的體積
橢球的體積
橢球的表面積
橢球的表面積
四角錐體積
四角錐體積
四角錐表面積
四角錐表面積
圓錐體積
圓錐體積
圓錐表面積
圓錐表面積
圓錐台體積
圓錐台體積
圓錐台表面積
圓錐台表面積
圓管體積
圓管體積
膠囊形體積
膠囊形體積
膠囊表面積
膠囊表面積
日期與時間計算工具
年齡計算
年齡計算
天數計算
天數計算
幾天後的日期
幾天後的日期
幾小時後的日期時間
幾小時後的日期時間
星期幾查詢
星期幾查詢
時間加減計算機
時間加減計算機
時差計算機
時差計算機
工時計算機
工時計算機
時間差計算機
時間差計算機
打卡工時計算
打卡工時計算
金融與經濟計算工具
複利計算
複利計算
單利計算
單利計算
利息計算
利息計算
財務計算機 TVM
財務計算機 TVM
現值計算
現值計算
未來值計算
未來值計算
ROI 計算機
ROI 計算機
IRR 計算機
IRR 計算機
回收期間計算
回收期間計算
平均報酬率計算
平均報酬率計算
GDP 計算機
GDP 計算機
網路行銷與廣告指標計算工具
CTR 點擊率計算
CTR 點擊率計算
CVR 轉換率計算
CVR 轉換率計算
CPC、CPM、CPA 計算
CPC、CPM、CPA 計算
ROAS 計算
ROAS 計算
損益平衡 CPA
損益平衡 CPA
LTV 顧客終身價值
LTV 顧客終身價值
CAC 顧客取得成本
CAC 顧客取得成本
流失率計算
流失率計算
A/B 測試顯著性
A/B 測試顯著性
A/B 測試樣本數
A/B 測試樣本數
SEO 流量預估
SEO 流量預估
損益平衡點計算
損益平衡點計算
成本率毛利率換算
成本率毛利率換算
CAGR 計算機
CAGR 計算機
健康與健身計算工具
BMI 計算機
BMI 計算機
睡眠週期計算
睡眠週期計算
熱量計算機
熱量計算機
BMR 計算機
BMR 計算機
TDEE 計算機
TDEE 計算機
理想體重計算機
理想體重計算機
體脂率計算機
體脂率計算機
去脂體重計算機
去脂體重計算機
消耗熱量計算機
消耗熱量計算機
蛋白質計算機
蛋白質計算機
三大營養素計算
三大營養素計算
碳水攝取量計算
碳水攝取量計算
脂肪攝取量計算
脂肪攝取量計算
孩子身高預測
孩子身高預測
運動計算工具
高爾夫差點計算
高爾夫差點計算
配速計算機
配速計算機
1RM 計算機
1RM 計算機
目標心跳率計算
目標心跳率計算
氣象計算工具
體感溫度計算
體感溫度計算
風寒效應計算
風寒效應計算
露點溫度計算
露點溫度計算
電腦計算工具
進位轉換
進位轉換
子網路計算機
子網路計算機
下載時間計算
下載時間計算
家計與水電瓦斯費計算工具
家電電費計算
家電電費計算
度數算電費/反推
度數算電費/反推
年耗電量算電費
年耗電量算電費
冷氣坪數計算
冷氣坪數計算
冷氣電費計算
冷氣電費計算
暖氣電費比較
暖氣電費比較
瓦斯與電費比較
瓦斯與電費比較
換 LED 省多少
換 LED 省多少
薪資換算
薪資換算
家庭收支計算
家庭收支計算
汽車計算工具
油錢計算
油錢計算
電動車充電費用
電動車充電費用
電動車 vs 油車
電動車 vs 油車
油耗計算
油耗計算
輪胎尺寸計算
輪胎尺寸計算
太陽能發電與儲能計算工具
太陽能發電量
太陽能發電量
太陽能板片數
太陽能板片數
太陽能回本年限
太陽能回本年限
儲能電池容量試算
儲能電池容量試算
居家與 DIY計算工具
磁磚數量計算
磁磚數量計算
樓梯尺寸計算
樓梯尺寸計算
混凝土用量計算
混凝土用量計算
房間牆面積計算
房間牆面積計算
壁紙用量計算
壁紙用量計算
油漆用量計算
油漆用量計算
木地板片數計算
木地板片數計算
外牆面積計算
外牆面積計算
碎石用量計算
碎石用量計算
水泥砂漿配比
水泥砂漿配比
坡度計算
坡度計算
木材裁切計算
木材裁切計算
建蔽率、容積率
建蔽率、容積率
地板捲材用量
地板捲材用量
隔熱材用量計算
隔熱材用量計算
窗簾尺寸計算
窗簾尺寸計算
電視尺寸與距離
電視尺寸與距離
培養土用量計算
培養土用量計算
草皮用量計算
草皮用量計算
空心磚數量計算
空心磚數量計算
紅磚數量計算
紅磚數量計算
木棧板材料計算
木棧板材料計算
坡道長度計算
坡道長度計算
螺絲導孔與長度
螺絲導孔與長度
換氣量計算
換氣量計算
油漆稀釋計算
油漆稀釋計算
踢腳板長度計算
踢腳板長度計算
百葉窗捲簾尺寸
百葉窗捲簾尺寸
掛畫高度與位置
掛畫高度與位置
排水坡度與高低差
排水坡度與高低差
螺絲數量計算
螺絲數量計算
木材才數計算
木材才數計算
圍籬材料計算
圍籬材料計算
木材收縮計算
木材收縮計算
矽利康用量計算
矽利康用量計算
房間熱損失計算
房間熱損失計算
家具搬入計算
家具搬入計算
搬家紙箱數量
搬家紙箱數量
收納容量計算
收納容量計算
板材裁切計算
板材裁切計算
層板承重計算
層板承重計算

板材裁切計算機(一張夾板能裁幾片)

請輸入板材尺寸、鋸路、木紋方向,以及要裁出的零件的寬、高、片數(零件最多 8 種,寬和高都空白的列會被忽略)。厚度和板材單價可以留空。

× mm
代號 名稱(選填) 寬(mm) 高(mm) 片數
A
B
C
D
E
F
G
H
長度全部以 mm(公釐)輸入。鋸路留空時以 3 mm、片數留空時以 1 片計算。零件名稱留空時會顯示「零件 A」~「零件 H」。
計算結果與圖形
在左側輸入板材的尺寸,以及要裁出的零件的寬、高、片數,按下「計算」,結果和裁切配置圖就會顯示在這裡。

這個頁面可以做什麼

  • 只要輸入板材的尺寸(可從 3 × 6 尺 1820 × 910 mm、4 × 8 尺 2440 × 1220 mm 等下拉選單選擇或手動輸入),以及要裁出的零件的寬、高、片數(最多 8 種),馬上就知道要買幾張板材
  • 會考慮鋸路(鋸片的厚度,預設 3 mm)和木紋方向(零件能否轉 90°)。只有同一種零件時用「橫 × 直」的格子計算(也會比較轉向,以及在剩下的長條轉向排入的方案);多種零件則依高度排成一層一層的分層排列法合併裁切
  • 顯示每張板材「哪裡放什麼」的彩色裁切配置圖,以及「第 1 張板材:頂板 × 2+側板 × 2,剩料 0.286 m²」這樣的配置表。也會和每種零件各用不同板材裁切時的張數比較,看出合併裁切能省幾張
  • 同時列出剩料面積、利用率(零件總面積 ÷ 板材總面積),以及由面積求出的理論最少張數(下限),並顯示配置是否等於下限。輸入板材單價(選填)還會算出概算費用
  • 公式的淺顯解說,以及 Excel、Google 試算表、Python 可直接複製的公式,也都整理在這個頁面
配置是用「只把同一種零件排成橫 × 直」「把零件依高度由高到低排成一層一層(分層排列法)」這種固定步驟的啟發式方法,不一定總是得到最少張數(不保證最佳解)。所有裁切線都以從板材一端直直切到另一端為前提(直通裁切),符合居家修繕賣場、木材行代客裁切的切法(只能直線裁切,有些店每張板材的裁切次數有上限)。專業的開料軟體會找更複雜的組合,但用在 DIY 採購和交代裁切已經足夠準確。角材、管子這類「只看長度」的一維取料,請用「木材裁切計算機」。

這個計算有什麼用?

DIY 書櫃、收納箱、書桌時採購夾板

例如用 3 × 6 尺(1820 × 910 mm)的夾板做頂板 900 × 450 mm × 2 片、側板 700 × 400 mm × 4 片、層板 600 × 350 mm × 3 片的書櫃,每種零件分開買要 3 張板材,但依高度一層一層排入的合併裁切只要 2 張(第 1 張:頂板 × 2+側板 × 2,第 2 張:側板 × 2+層板 × 3)。
夾板很占空間、不好放進車裡,買多了也沒地方放,所以採購前先決定好張數和配置就不會浪費。想讓木紋對齊的裝飾夾板選「對齊」計算,結構用夾板或要整面上漆的板子選「不限」減少張數。

交代賣場、木材行代客裁切

居家修繕賣場或木材行的代客裁切(裁板機)只能「從板材一端直直切到另一端」,常以每刀計價,有些店也會限制每張板材的裁切次數。本頁的配置圖符合這種切法(直通裁切),照著圖交代「先在從上面算 450 mm 的位置橫切一刀,再把上面那塊從左邊算 900 mm 的位置直切……」,到店裡就不會手忙腳亂(鋸路是鋸片削掉的部分,所以裁切位置就是零件尺寸本身)。
先數好裁切的刀數,就能估出費用,也能確認是否在次數上限內。鋸路請依店家裁板機的鋸片厚度(多在 3 mm 左右,可以向店家確認)修改。另外,有些店不接寬度很窄(幾 cm 以下)的裁切,或斜切、切到一半停下的裁切,細長零件多時先確認比較安心。

在設計階段配合「好裁的尺寸」

把 3 × 6 尺板四等分的 455 × 455 mm 零件,不計鋸路看起來能裁 8 片,但鋸路 3 mm 時橫 \(\lfloor 1823 \div 458 \rfloor = 3\) 片、直 \(\lfloor 913 \div 458 \rfloor = 1\) 片,只能裁 3 片。只要改成 450 × 450 mm,就能裁橫 4 片 × 直 2 片=8 片。
像這樣,在設計階段把零件尺寸稍微改一下,板材張數可能差很多。把層板深度縮 5 mm、桌面分成 2 片等調整,採購前先用這個計算機試試,就能省下材料費。

家具工廠、木作師傅、招牌店的材料規劃(排版)

家具工廠、木作師傅、招牌店(鋁複合板、壓克力板)、鈑金工廠(鐵板)的材料費占成本很大的比例,所以平常就在管理要怎麼從板材裁出零件(排版、開料)和利用率。本頁的「利用率」是零件總面積除以板材總面積,實務上也是同樣的定義。
實際的工廠要配置好幾百種零件,所以會用專用的開料軟體(排版軟體)。分層排列法是二維長方形排列教科書等級的啟發式方法,也是這類軟體思路的基礎之一。

壓克力板、玻璃、矽酸鈣板、裝飾板等各種板材

「從固定規格的板子裁出長方形」的東西,都能用和夾板相同的公式計算,例如壓克力板、PVC 板(4 × 8 尺、3 × 6 尺等規格)、台灣天花板常用的矽酸鈣板與石膏板(3 × 6 尺)、裝飾板、木心板、清水模板等。玻璃這種用刀劃線再折斷的材料,鋸路請設為 0(磁磚用手動切割器時也是 0,用水刀切割機就是刀片厚度),沒有木紋的材料選「不限」,張數就會減少。
不過玻璃和薄壓克力容易破,有花紋的裝飾板有花紋方向的限制,請配合材料的特性修改鋸路和轉向的設定。

公式與圖示

只排同一種零件時,一張板材能裁的片數
圖示
數學寫法 (一般的數學式)
\(c\) \(=\) \(\lfloor\) \((\) \(W\) \(+\) \(k\) \()\) \(\div\) \((\) \(w\) \(+\) \(k\) \()\) \(\rfloor\)
\(r\) \(=\) \(\lfloor\) \((\) \(H\) \(+\) \(k\) \()\) \(\div\) \((\) \(h\) \(+\) \(k\) \()\) \(\rfloor\)
\(m\) \(=\) \(c\) \(\times\) \(r\)
文字寫法 (把符號換成文字的公式)
④ 橫排的片數 \(c\) \(=\) \(\lfloor\) \((\) ① 板材寬 \(W\) \(+\) ② 鋸路 \(k\) \()\) \(\div\) \((\) ③ 零件寬 \(w\) \(+\) 鋸路 \(k\) \()\) \(\rfloor\)
⑦ 直排的片數 \(r\) \(=\) \(\lfloor\) \((\) ⑤ 板材高 \(H\) \(+\) 鋸路 \(k\) \()\) \(\div\) \((\) ⑥ 零件高 \(h\) \(+\) 鋸路 \(k\) \()\) \(\rfloor\)
⑧ 一張板材能裁的片數 \(m\) \(=\) 橫排的片數 \(c\) \(\times\) 直排的片數 \(r\)
用文字讀公式
① 板材寬 \(W\) 加上 1 次
② 鋸路 \(k\) ,除以
③ 零件寬 \(w\) 也加上鋸路 \(k\) 的值,小數部分無條件捨去(符號 \(\lfloor\ \rfloor\) 表示「無條件捨去」),
④ 就是 橫排的片數 \(c\) 。同樣地,
⑤ 板材高 \(H\) 加上鋸路,除以
⑥ 零件高 \(h\) 加上鋸路的值再無條件捨去,
⑦ 就是 直排的片數 \(r\) ,兩者相乘,
⑧ 就是 一張板材能裁的片數 \(m\)
簡單範例
從 3 × 6 尺(1820 × 910 mm)的夾板裁 600 × 400 mm 的層板,鋸路 3 mm 時一張能裁的片數是
橫排的片數 \(c\) \(=\) \(\lfloor\) \((\) 板材寬(1820 mm) \(+\) 鋸路(3 mm) \()\) \(\div\) \((\) 零件寬(600 mm) \(+\) 鋸路(3 mm) \()\) \(\rfloor\)
直排的片數 \(r\) \(=\) \(\lfloor\) \((\) 板材高(910 mm) \(+\) 鋸路(3 mm) \()\) \(\div\) \((\) 零件高(400 mm) \(+\) 鋸路(3 mm) \()\) \(\rfloor\)
能裁的片數 \(m\) \(=\) 橫排的片數 \(c\) \(\times\) 直排的片數 \(r\)
\(c = \lfloor 1823 \div 603 \rfloor = \lfloor 3.02 \cdots \rfloor = 3\)
\(r = \lfloor 913 \div 403 \rfloor = \lfloor 2.26 \cdots \rfloor = 2\)
\(m = 3 \times 2 = 6\)
思考重點
要橫排 \(n\) 片,零件寬 \(n\) 片份加上中間 \(n - 1\) 次的鋸路,必須放得進板材的寬(最後一片用到板材邊緣就好,那裡不必再切)。也就是 \(n \times w + (n - 1) \times k \le W\),兩邊都加上 \(k\) 就變成 \(n \times (w + k) \le W + k\)。所以「板材寬+鋸路」除以「零件寬+鋸路」再無條件捨去,就是橫排的片數。直的方向也是同樣的思路,二維取料就是「橫排幾片 × 直排幾片」的乘法。這個式子以板材邊緣直接當零件邊緣使用為前提,板邊有缺角或不直、需要修邊時,請把修掉的部分扣掉再輸入板材尺寸。 忽略鋸路可能會算錯片數。例如把 3 × 6 尺板四等分成 455 × 455 mm 的零件,不計鋸路時能裁橫 4 片 × 直 2 片=8 片,但鋸路 3 mm 時 \(\lfloor 1823 \div 458 \rfloor = 3\)、\(\lfloor 913 \div 458 \rfloor = 1\),只能裁 3 片(橫的第 4 片差 9 mm,直的第 2 片差 3 mm)。 木紋方向選「不限」時,這個計算機會把零件的寬和高交換(轉 90°)再算一次,採用較多的那個。還會試在格子右側或下方剩下的長條,轉向排入零件的方案(例如橫 3 片 × 直 3 片=9 片,再在右邊剩下的寬度轉向多排 1 片,共 10 片)。這個簡單計算是「只排同一種零件」時的片數,多種零件混在一起時,會用下一個「分層排列法」配置。
每種零件分開買時的張數
數學寫法 (一般的數學式)
\(B_i\) \(=\) \(\lceil\) \(q_i\) \(\div\) \(m_i\) \(\rceil\)
\(B_{\text{分}}\) \(=\) \(B_1 + B_2 + \cdots\)
文字寫法 (把符號換成文字的公式)
③ 只裁零件 \(i\) 所需的板材張數 \(B_i\) \(=\) \(\lceil\) ① 零件 \(i\) 的需要片數 \(q_i\) \(\div\) ② 一張板材能裁的片數 \(m_i\) \(\rceil\)
⑤ 分開買時的合計張數 \(B_{\text{分}}\) \(=\) ④ 各零件張數 \(B_1,\ B_2,\ \ldots\) 的合計
用文字讀公式
① 零件 \(i\) 的需要片數 \(q_i\) 除以
② 一張板材能裁的片數 \(m_i\) ,小數部分無條件進位(符號 \(\lceil\ \rceil\) 表示「無條件進位」),
③ 就是 只裁零件 \(i\) 所需的板材張數 \(B_i\) ,
④ 各零件張數 \(B_1,\ B_2,\ \ldots\) 的合計 ,
⑤ 就是 分開買時的合計張數 \(B_{\text{分}}\)
簡單範例
從 3 × 6 尺板(鋸路 3 mm、可以轉向)裁頂板 900 × 450 mm × 2 片、側板 700 × 400 mm × 4 片、層板 600 × 350 mm × 3 片,每種零件各用不同板材時的張數是
\(\text{頂板}:\lceil 2 \div 4 \rceil = 1,\quad \text{側板}:\lceil 4 \div 5 \rceil = 1,\quad \text{層板}:\lceil 3 \div 6 \rceil = 1\)
\(B_{\text{分}} = 1 + 1 + 1 = 3\)
思考重點
像「頂板用的板材」「側板用的板材」這樣依零件種類分開買板材,就是這個簡單計算。頂板一張板材能裁 4 片(橫 2 × 直 2),所以 2 片只要 1 張(剩 2 片份);側板能裁 5 片(橫 2 × 直 2 共 4 片,再在右邊剩下寬 414 mm 的長條轉向排 1 片),所以 4 片只要 1 張;層板能裁 6 片(橫 3 × 直 2),所以 3 片只要 1 張(剩 3 片份),合計 3 張。 這種方法思路簡單,裁切時也不會搞混,但頂板和層板的板材剩下很多。下一個「分層排列法」,就是把其他零件塞進這些剩餘空間來減少張數的方法。
分層排列法的配置(排進同一層的條件與疊得下層的條件)
圖示
數學寫法 (一般的數學式)
\(w_1 + w_2 + \cdots + w_n\) \(+\) \((n - 1)\) \(\times\) \(k\) \(\leq\) \(W\)
\(h_1 + h_2 + \cdots + h_s\) \(+\) \((s - 1)\) \(\times\) \(k\) \(\leq\) \(H\)
文字寫法 (把符號換成文字的公式)
① 同一層排的零件寬 \(w_1,\ w_2,\ \ldots,\ w_n\) 的合計 \(+\) ② 同一層的片數 \(n\) 減 1 \(\times\) ③ 鋸路 \(k\) \(\leq\) ④ 板材寬 \(W\)
⑤ 各層高度(該層最高零件的高)\(h_1,\ h_2,\ \ldots,\ h_s\) 的合計 \(+\) ⑥ 層數 \(s\) 減 1 \(\times\) 鋸路 \(k\) \(\leq\) ⑦ 板材高 \(H\)
用文字讀公式
① 同一層排的零件寬 \(w_1,\ w_2,\ \ldots,\ w_n\) 的合計 ,加上
② 同一層的片數 \(n\) 減 1 乘以
③ 鋸路 \(k\) (零件之間鋸路的合計),只要在
④ 板材寬 \(W\) 以下,就能排進這一層。同樣地,
⑤ 各層高度(該層最高零件的高)\(h_1,\ h_2,\ \ldots,\ h_s\) 的合計 ,加上
⑥ 層數 \(s\) 減 1 乘以鋸路 \(k\),只要在
⑦ 板材高 \(H\) 以下,就能在這張板材疊上這些層
簡單範例
把上面的例子(頂板 900 × 450 mm × 2 片、側板 700 × 400 mm × 4 片、層板 600 × 350 mm × 3 片,鋸路 3 mm)用分層排列法配置到 3 × 6 尺板,第 1 張板材會是「頂板 2 片的一層」和「側板 2 片的一層」共 2 層
\(\text{第 1 層(高 450)}:900 + 900 + 1 \times 3 = 1803 \leq 1820\)
\(\text{第 2 層(高 400)}:700 + 700 + 1 \times 3 = 1403 \leq 1820\)
\(\text{各層高度合計}:450 + 400 + 1 \times 3 = 853 \leq 910\)
思考重點
分層排列法(FFDH=First Fit Decreasing Height)是用下面的步驟決定配置。 (1) 把所有零件依高度由高到低排列(高度相同時依寬度由寬到窄,再相同就依輸入的列順序)。 (2) 從第一個零件開始,依序放進現有各層中「剩下的寬度放得下、且零件高度不超過該層高度」的第一層。木紋選不限時,轉向後放得下的層也可以放。 (3) 沒有放得下的層,就在現有板材中「剩下的高度放得下零件高度」的第一張開新的一層。也沒有的話,就再加一張新的板材。 每一層的高度,是最先放進去的零件(=該層最高的零件)的高度。同一層內每次往右前進「零件寬+鋸路」,層與層之間每次往下前進「高+鋸路」,所以條件就是上面兩條不等式。用「層」來分區,是為了讓裁切線能從板材一端直直切到另一端(直通裁切),和居家修繕賣場、木材行用裁板機代客裁切的切法相同。 這個計算機會把零件方向(木紋不限時有「長邊橫放」「長邊直放」「原輸入方向」)和層的方向(橫向分層、直向分條)的組合全部試過,採用張數最少的;再和「先把只排同一種零件的板材排滿,剩下的用分層排列法」「每種零件分開裁」的方法比較,顯示最少的那個。即使如此,二維取料的組合非常多,不保證這就是最少張數。專業的開料軟體會找更複雜的組合,以及不從板材一端切到另一端的切法;家庭 DIY 以這個結果為參考,把剩下的剩料拿去做小東西最實用。
剩料面積與利用率
數學寫法 (一般的數學式)
\(A_{\text{剩}}\) \(=\) \(B\) \(\times\) \(W\) \(\times\) \(H\) \(-\) \(\sum_i q_i\,w_i\,h_i\)
\(Y\) \(=\) \(\sum_i q_i\,w_i\,h_i\) \(\div\) \((\) \(B\) \(\times\) \(W\) \(\times\) \(H\) \()\) \(\times\) \(100\)
文字寫法 (把符號換成文字的公式)
⑤ 剩料面積 \(A_{\text{剩}}\) \(=\) ① 板材張數 \(B\) \(\times\) ② 板材寬 \(W\) \(\times\) ③ 板材高 \(H\) \(-\) ④ 所有零件的面積合計 \(\sum_i q_i\,w_i\,h_i\)
⑥ 利用率 \(Y\)(%) \(=\) 所有零件的面積合計 \(\sum_i q_i\,w_i\,h_i\) \(\div\) \((\) 板材張數 \(B\) \(\times\) 板材寬 \(W\) \(\times\) 板材高 \(H\) \()\) \(\times\) \(100\)
用文字讀公式
① 板材張數 \(B\) 乘以
② 板材寬 \(W\) 和
③ 板材高 \(H\) (買的板材總面積),減去
④ 所有零件的面積合計 \(\sum_i q_i\,w_i\,h_i\) ,
⑤ 就是 剩料面積 \(A_{\text{剩}}\) ;零件面積合計除以板材總面積再乘以 100,
⑥ 就是 利用率 \(Y\)(%)
簡單範例
上面的例子(頂板 2 片、側板 4 片、層板 3 片配置到 2 張 3 × 6 尺板)的剩料面積和利用率是
\(\sum q\,w\,h = 2 \times 900 \times 450 + 4 \times 700 \times 400 + 3 \times 600 \times 350\)
\(= 810{,}000 + 1{,}120{,}000 + 630{,}000 = 2{,}560{,}000\ \text{mm}^2\)
\(A_{\text{剩}} = 2 \times 1820 \times 910 - 2{,}560{,}000 = 752{,}400\ \text{mm}^2 \approx 0.752\ \text{m}^2\)
\(Y = 2{,}560{,}000 \div 3{,}312{,}400 \times 100 \approx 77.3\ \%\)
思考重點
剩料面積是「買的板材面積」和「當零件使用的面積」的差,所以也包含被鋸路變成木屑的部分(鋸路 3 mm、切 1 m 長就損失 3,000 mm²=0.003 m²,零件越多影響越大)。1 m²=1,000,000 mm²,所以 mm² 的值除以 1,000,000 就是 m²。 利用率是材料中能當成品(零件)使用的比例,越接近 100% 浪費越少。數值會因零件尺寸和板材尺寸搭不搭而差很多(剛好把板材等分的尺寸就高,零碎尺寸或種類多就低),家庭 DIY 多少會有剩料是正常的。剩料可以拿去做小層板或補強材,所以不能只看利用率判斷好壞。
由面積求出的理論最少張數(下限)
數學寫法 (一般的數學式)
\(B_{\min}\) \(=\) \(\lceil\) \(\sum_i q_i\,(w_i + k)(h_i + k)\) \(\div\) \((W + k)(H + k)\) \(\rceil\)
文字寫法 (把符號換成文字的公式)
③ 理論最少張數 \(B_{\min}\) \(=\) \(\lceil\) ① 所有零件的(寬+鋸路)×(高+鋸路)合計 \(\sum_i q_i\,(w_i + k)(h_i + k)\) \(\div\) ② (板材寬+鋸路)×(板材高+鋸路)\((W + k)(H + k)\) \(\rceil\)
用文字讀公式
① 所有零件的(寬+鋸路)×(高+鋸路)合計 \(\sum_i q_i\,(w_i + k)(h_i + k)\) 除以
② (板材寬+鋸路)×(板材高+鋸路)\((W + k)(H + k)\) ,小數部分無條件進位,
③ 就是 理論最少張數 \(B_{\min}\)
簡單範例
上面的例子(頂板 900 × 450 mm × 2 片、側板 700 × 400 mm × 4 片、層板 600 × 350 mm × 3 片,3 × 6 尺板、鋸路 3 mm)的理論最少張數是
\(2 \times 903 \times 453 + 4 \times 703 \times 403 + 3 \times 603 \times 353\)
\(= 818{,}118 + 1{,}133{,}236 + 638{,}577 = 2{,}589{,}931\)
\((1820 + 3) \times (910 + 3) = 1823 \times 913 = 1{,}664{,}399\)
\(2{,}589{,}931 \div 1{,}664{,}399 \approx 1.56,\quad \lceil 1.56 \rceil = 2\)
思考重點
再怎麼巧妙地配置,零件也放不進面積比零件總面積還小的板材。把鋸路也算進去,把「每片零件占 \((w + k) \times (h + k)\) 的面積、板材有 \((W + k) \times (H + k)\) 的面積」相除再無條件進位,就是只由面積決定的下限(不可能比這更少的張數)。上面的例子,分層排列法的 2 張等於下限的 2 張,可以確定這是無法再減少的最佳張數。 不過二維取料常常面積還有剩,卻因為「形狀不合」而放不進去。例如從 3 × 6 尺板裁 1 片 1800 × 450 mm 的桌面和 2 片 500 × 500 mm 的箱子側板,面積的下限是 1 張,但桌面下方剩下的高度是 \(910 - 450 - 3 = 457\) mm,放不下 500 mm 的側板,需要 2 張板材。和一維的木材裁切相比,下限和實際張數更容易有差距,所以顯示「近似」時,換組合也不一定能減少。
能省的張數與概算費用
數學寫法 (一般的數學式)
\(\Delta\) \(=\) \(B_{\text{分}}\) \(-\) \(B\)
\(T\) \(=\) \(u\) \(\times\) \(B\)
文字寫法 (把符號換成文字的公式)
③ 能省的張數 \(\Delta\) \(=\) ① 分開買時的張數 \(B_{\text{分}}\) \(-\) ② 合併裁切的張數 \(B\)
⑤ 概算費用 \(T\) \(=\) ④ 板材單價 \(u\) \(\times\) 合併裁切的張數 \(B\)
用文字讀公式
① 分開買時的張數 \(B_{\text{分}}\) 減去
② 合併裁切的張數 \(B\) ,
③ 就是 能省的張數 \(\Delta\) ;
④ 板材單價 \(u\) 乘以合併裁切的張數 \(B\),
⑤ 就是 概算費用 \(T\)
簡單範例
上面的例子中,每張板材 NT$500 時,能省的張數和費用是
\(\Delta = 3 - 2 = 1\)
\(T = 500 \times 2 = 1000\)
\(500 \times 3 - 1000 = 500\)
思考重點
分開買的費用是 \(u \times B_{\text{分}}\),合併裁切的費用是 \(u \times B\),所以差額是 \(u \times \Delta\)。單價請輸入每張板材的價格。費用只有板材本身,不含裁切費(常以每刀多少計價)、運費、塗料等。要估裁切費時,請數配置圖上裁切線的條數。
只有同一種零件時,用「(板材寬+鋸路)÷(零件寬+鋸路)無條件捨去」×「高也同樣計算」,就知道一張能裁幾片。多種零件時,用依高度一層一層排入的分層排列法(裁切線從一端通到另一端的直通裁切)合併裁切,等於面積的下限時就無法再減少。不等於時,二維取料也常因形狀限制無法減到下限,本計算機的配置是不保證最佳解的參考值。

符號與用語解說

符號

\(W\) 板材的寬(mm),也就是買來的一張夾板的橫向長度。取自 Width(寬)的字首,為了和零件寬 \(w\) 區別用大寫。
\(H\) 板材的高(mm),也就是一張夾板的直向長度。取自 Height(高)的字首,為了和零件高 \(h\) 區別用大寫。木紋選「不限」時交換寬和高張數也不變(選「對齊」時要和零件方向一致)。
\(w\)、\(w_i\) 零件(要裁出的板)的寬(mm)。\(w_i\) 的 \(i\) 是「第 \(i\) 種零件」的編號(因為有頂板、側板、層板等好幾種)。
\(h\)、\(h_i\) 零件的高(mm)。分層排列法的式子中,\(h_1,\ h_2,\ \ldots\) 也用來表示「各層的高度」(層高=該層最高零件的高)。
\(k\) 鋸路(鋸片厚度,mm)。每切一次就會損失這麼多的板子。取自 kerf(英文的「鋸口」)的字首。
\(c\) 只排同一種零件時,沿板材寬方向橫排的片數,用 \(\lfloor (W + k) \div (w + k) \rfloor\) 求出。取自 column(行)的字首。
\(r\) 只排同一種零件時,沿板材高方向直排的片數,用 \(\lfloor (H + k) \div (h + k) \rfloor\) 求出。取自 row(列)的字首。
\(m\)、\(m_i\) 只排同一種零件時,一張板材能裁的片數,用橫排片數 \(c\) 乘以直排片數 \(r\) 的 \(m = c \times r\) 求出。
\(q_i\) 零件 \(i\) 的需要片數,取自 quantity(數量)的字首。
\(B_i\) 只裁零件 \(i\) 所需的板材張數,用 \(\lceil q_i \div m_i \rceil\) 求出。
\(B_{\text{分}}\) 每種零件各用不同板材裁切(分開買)時的合計張數,是各零件 \(B_i\) 全部加起來的值。
\(B\) 合併裁切(分層排列法等配置)所需的板材張數,是本頁的主角。
\(n\) 同一層橫排的零件片數。零件之間有 \(n - 1\) 次的鋸路,用於排進同一層的條件式。取自 number(數)的字首。
\(s\) 一張板材上疊的層數。層與層之間有 \(s - 1\) 次的鋸路,用於疊得下層的條件式。取自 shelf(層架)的字首。
\(A_{\text{剩}}\) 剩料面積(mm²、m²)。買的板材總面積減去零件總面積的值,也包含被鋸路變成木屑的部分。\(A\) 取自 Area(面積)的字首。
\(Y\) 利用率(%)。零件總面積除以板材總面積再乘以 100 的值,取自 Yield(產出率)的字首。
\(B_{\min}\) 由面積求出的理論最少張數(下限),用 \(\lceil \sum_i q_i (w_i + k)(h_i + k) \div ((W + k)(H + k)) \rceil\) 求出,合併裁切的張數 \(B\) 等於它就是最佳。min 是 minimum(最小)的縮寫。
\(\Delta\) 能省的張數,就是 \(B_{\text{分}} - B\)。希臘字母 delta 常用來表示「差」(對應 difference 的字首 d)。
\(u\) 每張板材的單價(NT$),取自 unit price(單價)的字首。
\(T\) 概算費用(NT$),取自 total(合計)的字首。只有板材本身,不含裁切費、運費。
\(\lfloor x \rfloor\) 高斯符號(地板函數),把小數部分無條件捨去變成整數的符號(例如:\(\lfloor 3.02 \rfloor = 3\)、\(\lfloor 2 \rfloor = 2\))。能裁的片數要「捨去放不下的部分」,所以用這個符號。
\(\lceil x \rceil\) 天花板函數,把小數部分無條件進位變成整數的符號(例如:\(\lceil 1.56 \rceil = 2\)、\(\lceil 2 \rceil = 2\))。買的張數要「不夠就多買一張」,所以用這個符號。
\(\sum\) 表示「全部加起來」的符號。\(\sum_i q_i w_i h_i\) 就是對每種零件 \(i\) 計算 \(q_i w_i h_i\)(片數 × 寬 × 高)再全部相加。希臘字母 sigma,相當於 Sum(合計)的字首 S。

用語

板材 用來裁出零件的整張大板,例如夾板、木心板、MDF、裝飾板、壓克力板、鐵板等以固定規格尺寸販售的板材。本頁把它當成寬 \(W\) × 高 \(H\) 的長方形。
取料 決定要怎麼從板材裁出所需零件的作業,也叫開料、裁切規劃。本頁是同時考慮寬和高的二維取料;角材、管子這類只考慮長度的一維取料,請用「木材裁切計算機」。
鋸路 用鋸子切時,板子被鋸片厚度削掉而損失的長度。圓鋸或裁板機的鋸片厚度多在 1.5~3 mm,再加上切口崩邊和畫線的寬度,一般抓 3 mm 左右估算。知道使用的鋸片厚度(鋸片上刻印的 kerf 值)時,請輸入該值。切幾次就累積幾次,裁很多小零件時影響越大。
木紋 木材纖維方向在板面形成的花紋。裝飾夾板或實木板,零件的木紋不全部同方向看起來會不自然,所以取料時零件可能不能轉 90°。本頁用「木紋方向」選擇能否轉向。結構用夾板或要整面上漆的板子選「不限」即可。
直通裁切 從板材一端直直切到另一端的切法(英文 guillotine cut)。切下來的板子再從一端切到另一端,重複下去裁出零件。賣場或木材行代客裁切用的裁板機只能這樣切,所以本計算機的配置也限定為能直通裁切的形狀(分層排列法)。允許切到一半停下的切法(L 形切口)有時能排得更密,但家用圓鋸也不好切,所以不採用。
分層排列法
(FFDH)
把零件依高度由高到低排列,從上往下依序做出橫跨板材的「層」並排入的配置步驟。是 First Fit Decreasing Height(依高度由大到小,放進第一個放得下的層)的縮寫,屬於二維長方形排列的代表性啟發式方法。裁切線從一端通到另一端,所以可以直接請店家代客裁切。步驟簡單、結果也不錯,但不一定總是最少張數。
剩料 裁出零件後剩下的材料,例如板材邊緣剩下的細長板,或層右邊剩下的碎料。剩料越少材料浪費越少,利用率越高。大塊剩料可以拿去做小層板或補強材。
利用率 材料中能當成品(零件)使用的比例,也叫得料率。本頁是「零件總面積 ÷ 買的板材總面積」,剩料和鋸路越少就越接近 100%。
下限 「再怎麼巧妙也不可能比這更小」的值。本頁的理論最少張數是由面積求出的下限,配置的張數等於它就知道是最佳。不等於時,二維取料也常因形狀限制無法減到下限。
最佳解 所有可能方法中最好的答案。本頁指「板材張數最少的配置」。合併裁切的張數等於下限就是最佳解;不等於時,本計算機不會搜尋全部組合,所以無法確定是不是最佳解。
啟發式方法 「不保證一定是最佳解,但用固定步驟快速得到好答案的方法」(heuristic)。取料這類組合問題,零件一多可能的擺法就爆炸性增加、無法全部試,所以實務上也常用啟發式方法。本頁的分層排列法和格子計算都是其中之一。
夾板 把薄木片(單板)以木紋互相垂直的方式多層黏合的板子,也叫合板。不容易翹曲、能做成大片,廣泛用於 DIY 的層架、箱子和打底。有柳安夾板、松木結構夾板、裝飾夾板等;台灣常以「分」稱厚度,3 分約 9 mm、4 分約 12 mm。
清水模板 灌混凝土時當模板用的夾板,表面有塗裝,能讓混凝土表面平整。尺寸依產品而不同,用模板裁切時,請把板材尺寸改成實際的寬、高再計算。
3×6 尺 3 尺 × 6 尺(約 910 × 1820 mm)的板材規格。夾板、木心板、石膏板、矽酸鈣板最常見的尺寸之一。1 台尺約 303 mm,3 尺約 910 mm、6 尺約 1820 mm;店家和產品的實際尺寸會差幾 mm(例如 915 × 1830 mm)。
4×8 尺 4 尺 × 8 尺(約 1220 × 2440 mm)的板材規格。台灣的夾板、木心板很常用這個尺寸,比 3 × 6 尺大,想一整片裁出大桌面或整面牆板時使用。實際尺寸依產品略有不同,請確認購買產品的尺寸再輸入。
木心板 中間是實木條、兩面貼薄木片的三層板,台灣做系統櫃以外的木作櫃常用。厚度多為 18 mm(6 分),尺寸有 3 × 6 尺、3 × 7 尺、4 × 8 尺、2 × 8 尺等。

建議先了解的基礎知識

為了讓您「理解意思」地使用這個頁面的計算,這裡整理了事先了解會更好懂的基礎知識。

有餘數的除法(國小三~四年級,8~10 歲)
  • 知道像「1820 ÷ 600 = 3…20」這樣,除法的商表示「排得下幾片」,餘數表示「還剩多少」
概數(國小四年級,9~10 歲)
  • 了解無條件捨去、無條件進位、四捨五入的不同
  • 能用自己的話說明「為什麼能裁的片數要無條件捨去、買的張數要無條件進位」
長方形的面積(國小四年級,9~10 歲)
  • 知道長方形面積=寬 × 高,並能換算 mm²、m² 的單位(\(1\,\text{m}^2 = 1{,}000{,}000\,\text{mm}^2\))
百分率(國小五~六年級,10~12 歲)
  • 能像利用率「零件總面積 ÷ 板材總面積 × 100」這樣,用百分率(%)表示比例
用文字符號列式與不等式(國中,12~15 歲)
  • 能像「排得下 \(n\) 片的條件是 \(n \times w + (n-1) \times k \le W\)」這樣,用文字式表示條件
  • 知道不等式兩邊加上同一個數,大小關係不變(變形成 \(n(w + k) \le W + k\))

用 Excel 計算的方法

把下方表格整個複製,貼到 Excel 的 A1 儲存格就能直接使用。
求「只排同一種零件時,一張板材能裁的片數」的表格
板材寬(mm) 1820
板材高(mm) 910
零件寬(mm) 600
零件高(mm) 400
鋸路(mm) 3
橫排的片數 =INT((B1+B5)/(B3+B5))
直排的片數 =INT((B2+B5)/(B4+B5))
一張板材能裁的片數 =B6*B7
求「每種零件分開買時的張數」的表格
零件的需要片數 8
一張板材能裁的片數 6
需要的板材張數 =ROUNDUP(B1/B2,0)
求「剩料面積與利用率」的表格
板材張數 2
板材寬(mm) 1820
板材高(mm) 910
所有零件的面積合計(mm²) 1920000
剩料面積(mm²) =B1*B2*B3-B4
剩料面積(m²) =B5/1000000
利用率(%) =B4/(B1*B2*B3)*100
求「由面積求出的理論最少張數」的表格
所有零件的(寬+鋸路)×(高+鋸路)合計(mm²) 2589931
(板材寬+鋸路)×(板材高+鋸路)(mm²) 1664399
理論最少張數 =ROUNDUP(B1/B2,0)
求「能省的張數與概算費用」的表格
分開買時的張數 3
合併裁切的張數 2
板材單價(NT$) 500
能省的張數 =B1-B2
概算費用(NT$) =B3*B2
貼上後,B 欄上方的列是輸入欄,下方的列會自動算出結果。
「INT(值)」是把小數部分無條件捨去變成整數的函數(公式中的 ⌊ ⌋),「ROUNDUP(值,0)」是無條件進位的函數(公式中的 ⌈ ⌉)。
第 1 個表格的 B8 是 6 片(橫 3 片 × 直 2 片),第 2 個表格的 B3 是 2 張,第 3 個表格的 B6 是 1.3924 m²、B7 是 57.96…%(600 × 400 mm 裁 8 片、板材 2 張的例子),第 4 個表格的 B3 是 2 張,第 5 個表格是省 1 張、費用 NT$1,000。
分層排列法的配置本身,是把零件依高度重新排序、從上往下依序放進各層的手工作業,所以試算表適合用來確認「能裁的片數」「剩料」「下限」,配置圖用本頁或下方的 Python 程式碼產生最可靠。

用 Google 試算表計算的方法

把下方表格整個複製,貼到 Google 試算表的 A1 儲存格就能直接使用。
求「只排同一種零件時,一張板材能裁的片數」的表格
板材寬(mm) 1820
板材高(mm) 910
零件寬(mm) 600
零件高(mm) 400
鋸路(mm) 3
橫排的片數 =INT((B1+B5)/(B3+B5))
直排的片數 =INT((B2+B5)/(B4+B5))
一張板材能裁的片數 =B6*B7
求「每種零件分開買時的張數」的表格
零件的需要片數 8
一張板材能裁的片數 6
需要的板材張數 =ROUNDUP(B1/B2,0)
求「剩料面積與利用率」的表格
板材張數 2
板材寬(mm) 1820
板材高(mm) 910
所有零件的面積合計(mm²) 1920000
剩料面積(mm²) =B1*B2*B3-B4
剩料面積(m²) =B5/1000000
利用率(%) =B4/(B1*B2*B3)*100
求「由面積求出的理論最少張數」的表格
所有零件的(寬+鋸路)×(高+鋸路)合計(mm²) 2589931
(板材寬+鋸路)×(板材高+鋸路)(mm²) 1664399
理論最少張數 =ROUNDUP(B1/B2,0)
求「能省的張數與概算費用」的表格
分開買時的張數 3
合併裁切的張數 2
板材單價(NT$) 500
能省的張數 =B1-B2
概算費用(NT$) =B3*B2
可以直接使用和 Excel 相同的公式(INT、ROUNDUP 的函數名稱也一樣)。把表格整個複製貼到 A1 儲存格,再把 B 欄改成自己的數值即可。

用 Python 計算的方法

import math

sheet_w, sheet_h = 1820, 910   # 板材的寬、高(mm)。3 × 6 尺
kerf = 3                       # 鋸路(鋸片厚度,mm)
rotate = True                  # 木紋不限(零件可以轉 90°)時為 True
unit_price = 500               # 每張板材的單價(NT$)
# 要裁出的零件:(名稱, 寬mm, 高mm, 片數)
parts = [("頂板", 900, 450, 2), ("側板", 700, 400, 4), ("層板", 600, 350, 3)]

# 每種零件分開買時的張數(橫 × 直的格子。可以轉向時也試交換方向)
def per_sheet(w, h):
    return ((sheet_w + kerf) // (w + kerf)) * ((sheet_h + kerf) // (h + kerf))   # 無條件捨去(公式中的 ⌊ ⌋)
sheets_separate = 0
for name, w, h, qty in parts:
    m = max(per_sheet(w, h), per_sheet(h, w) if rotate else 0)
    sheets_separate += math.ceil(qty / m)   # 無條件進位(公式中的 ⌈ ⌉)

# 合併裁切:分層排列法(依高度由高到低,放進第一個放得下的層。可以轉向時長邊橫放)
pieces = []
for name, w, h, qty in parts:
    pw, ph = (max(w, h), min(w, h)) if rotate else (w, h)
    pieces += [(name, pw, ph)] * qty
pieces.sort(key=lambda p: (-p[2], -p[1]))
sheets = []   # 每張板材 {"y": 下一層的位置, "shelves": [{"y", "h", "x", "parts"}]}
for name, pw, ph in pieces:
    for sheet in sheets:
        shelf = next((s for s in sheet["shelves"] if ph <= s["h"] and pw <= sheet_w - s["x"]), None)
        if shelf is None and ph <= sheet_h - sheet["y"]:
            shelf = {"y": sheet["y"], "h": ph, "x": 0, "parts": []}
            sheet["shelves"].append(shelf)
            sheet["y"] += ph + kerf
        if shelf is not None:
            shelf["parts"].append((name, shelf["x"], shelf["y"], pw, ph))
            shelf["x"] += pw + kerf
            break
    else:
        sheets.append({"y": ph + kerf, "shelves": [{"y": 0, "h": ph, "x": pw + kerf, "parts": [(name, 0, 0, pw, ph)]}]})

# 剩料、利用率、面積的下限
parts_area = sum(qty * w * h for name, w, h, qty in parts)
total_area = len(sheets) * sheet_w * sheet_h
lower_bound = math.ceil(sum(qty * (w + kerf) * (h + kerf) for name, w, h, qty in parts) / ((sheet_w + kerf) * (sheet_h + kerf)))

print(f"每種零件分開買:{sheets_separate} 張")
print(f"合併裁切(分層排列法):{len(sheets)} 張(面積的下限 {lower_bound} 張)")
for i, sheet in enumerate(sheets, 1):
    for shelf in sheet["shelves"]:
        print(f"  板材{i} 層(y={shelf['y']}):" + "、".join(f"{n}@x={x} {pw}x{ph}" for n, x, y, pw, ph in shelf["parts"]))
print(f"剩料面積:{(total_area - parts_area) / 1e6:.3f} m²  利用率:{parts_area / total_area * 100:.1f}%")
print(f"概算費用:NT${unit_price * len(sheets)}")
只用標準函式庫就能執行。「//」是無條件捨去的除法(公式中的 ⌊ ⌋),math.ceil() 是無條件進位(公式中的 ⌈ ⌉)。這段程式碼是分層排列法的基本形(長邊橫放、只有橫向分層),所以本頁的計算機若用其他零件方向、層的方向的組合,或在長條轉向排入的方案找到更少的張數,結果可能和它不同(等於下限時就相同)。for 迴圈的 else 會在迴圈沒有 break 而結束時(哪張板材都放不下時)執行,加上一張新的板材。把開頭的板材尺寸、鋸路、零件清單改成自己的數值後執行即可。

用 LaTeX 等數學式語言的寫法(可直接複製)

只排同一種零件時,一張板材能裁的片數
c = ⌊(W + k) ÷ (w + k)⌋,  r = ⌊(H + k) ÷ (h + k)⌋,  m = c × r
c = \left\lfloor \frac{W + k}{w + k} \right\rfloor,\quad r = \left\lfloor \frac{H + k}{h + k} \right\rfloor,\quad m = c \times r
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <mi>c</mi>
    <mo>=</mo>
    <mo>&#x230A;</mo>
    <mfrac>
      <mrow><mi>W</mi><mo>+</mo><mi>k</mi></mrow>
      <mrow><mi>w</mi><mo>+</mo><mi>k</mi></mrow>
    </mfrac>
    <mo>&#x230B;</mo>
    <mo>,</mo>
    <mi>r</mi>
    <mo>=</mo>
    <mo>&#x230A;</mo>
    <mfrac>
      <mrow><mi>H</mi><mo>+</mo><mi>k</mi></mrow>
      <mrow><mi>h</mi><mo>+</mo><mi>k</mi></mrow>
    </mfrac>
    <mo>&#x230B;</mo>
    <mo>,</mo>
    <mi>m</mi>
    <mo>=</mo>
    <mi>c</mi>
    <mo>&#xD7;</mo>
    <mi>r</mi>
  </mrow>
</math>
c = |__ (W + k) / (w + k) __|,  r = |__ (H + k) / (h + k) __|,  m = c * r
c = Floor[(W + k)/(w + k)]; r = Floor[(H + k)/(h + k)]; m = c*r
c := floor((W + k)/(w + k));  r := floor((H + k)/(h + k));  m := c*r;
c = floor((W + k)/(w + k)); r = floor((H + k)/(h + k)); m = c*r;
c = ⌊(W + k)/(w + k)⌋, r = ⌊(H + k)/(h + k)⌋, m = c × r
每種零件分開買時的張數
Bᵢ = ⌈qᵢ ÷ mᵢ⌉,  B分 = B₁ + B₂ + …
B_i = \left\lceil \frac{q_i}{m_i} \right\rceil,\quad B_{\text{分}} = \sum_i B_i
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <msub><mi>B</mi><mi>i</mi></msub>
    <mo>=</mo>
    <mo>&#x2308;</mo>
    <mfrac><msub><mi>q</mi><mi>i</mi></msub><msub><mi>m</mi><mi>i</mi></msub></mfrac>
    <mo>&#x2309;</mo>
    <mo>,</mo>
    <msub><mi>B</mi><mtext>分</mtext></msub>
    <mo>=</mo>
    <munder><mo>&#x2211;</mo><mi>i</mi></munder>
    <msub><mi>B</mi><mi>i</mi></msub>
  </mrow>
</math>
B_i = |~ q_i / m_i ~|,  B_"分" = sum_i B_i
Total[Ceiling[q/m]]
B := add(ceil(q[i]/m[i]), i = 1 .. n);
B = sum(ceil(q ./ m));
B_i = ⌈q_i/m_i⌉, B_分 = ∑_i B_i
分層排列法的配置(排進同一層的條件與疊得下層的條件)
w₁ + w₂ + … + wₙ + (n − 1)k ≤ W,  h₁ + h₂ + … + hₛ + (s − 1)k ≤ H
\sum_{j=1}^{n} w_j + (n - 1)k \leq W,\quad \sum_{t=1}^{s} h_t + (s - 1)k \leq H
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <munderover><mo>&#x2211;</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
    <msub><mi>w</mi><mi>j</mi></msub>
    <mo>+</mo>
    <mo>(</mo><mi>n</mi><mo>&#x2212;</mo><mn>1</mn><mo>)</mo><mi>k</mi>
    <mo>&#x2264;</mo>
    <mi>W</mi>
    <mo>,</mo>
    <munderover><mo>&#x2211;</mo><mrow><mi>t</mi><mo>=</mo><mn>1</mn></mrow><mi>s</mi></munderover>
    <msub><mi>h</mi><mi>t</mi></msub>
    <mo>+</mo>
    <mo>(</mo><mi>s</mi><mo>&#x2212;</mo><mn>1</mn><mo>)</mo><mi>k</mi>
    <mo>&#x2264;</mo>
    <mi>H</mi>
  </mrow>
</math>
sum_(j=1)^n w_j + (n - 1) k <= W,  sum_(t=1)^s h_t + (s - 1) k <= H
Total[w] + (Length[w] - 1)*k <= W && Total[h] + (Length[h] - 1)*k <= H
add(w[j], j = 1 .. n) + (n - 1)*k <= W;  add(h[t], t = 1 .. s) + (s - 1)*k <= H;
sum(w) + (numel(w) - 1)*k <= W && sum(h) + (numel(h) - 1)*k <= H
∑_(j=1)^n w_j + (n − 1)k ≤ W, ∑_(t=1)^s h_t + (s − 1)k ≤ H
剩料面積與利用率
A剩 = B × W × H − Σ qᵢ wᵢ hᵢ,  Y = Σ qᵢ wᵢ hᵢ ÷ (B × W × H) × 100
A_{\text{剩}} = B\,W\,H - \sum_i q_i w_i h_i,\quad Y = \frac{\sum_i q_i w_i h_i}{B\,W\,H} \times 100
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <msub><mi>A</mi><mtext>剩</mtext></msub>
    <mo>=</mo>
    <mi>B</mi><mo>&#x2062;</mo><mi>W</mi><mo>&#x2062;</mo><mi>H</mi>
    <mo>&#x2212;</mo>
    <munder><mo>&#x2211;</mo><mi>i</mi></munder>
    <msub><mi>q</mi><mi>i</mi></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>h</mi><mi>i</mi></msub>
    <mo>,</mo>
    <mi>Y</mi>
    <mo>=</mo>
    <mfrac>
      <mrow><munder><mo>&#x2211;</mo><mi>i</mi></munder><msub><mi>q</mi><mi>i</mi></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>h</mi><mi>i</mi></msub></mrow>
      <mrow><mi>B</mi><mo>&#x2062;</mo><mi>W</mi><mo>&#x2062;</mo><mi>H</mi></mrow>
    </mfrac>
    <mo>&#xD7;</mo>
    <mn>100</mn>
  </mrow>
</math>
A_"剩" = B W H - sum_i q_i w_i h_i,  Y = (sum_i q_i w_i h_i) / (B W H) * 100
{B*W*H - Total[q*w*h], Total[q*w*h]/(B*W*H)*100}
Awaste := B*W*H - add(q[i]*w[i]*h[i], i = 1 .. n);  Y := add(q[i]*w[i]*h[i], i = 1 .. n)/(B*W*H)*100;
Awaste = B*W*H - sum(q .* w .* h); Y = sum(q .* w .* h)/(B*W*H)*100;
A_剩 = BWH − ∑_i q_i w_i h_i, Y = (∑_i q_i w_i h_i)/(BWH) × 100
由面積求出的理論最少張數(下限)
Bmin = ⌈Σ qᵢ (wᵢ + k)(hᵢ + k) ÷ ((W + k)(H + k))⌉
B_{\min} = \left\lceil \frac{\sum_i q_i (w_i + k)(h_i + k)}{(W + k)(H + k)} \right\rceil
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <msub><mi>B</mi><mi>min</mi></msub>
    <mo>=</mo>
    <mo>&#x2308;</mo>
    <mfrac>
      <mrow><munder><mo>&#x2211;</mo><mi>i</mi></munder><msub><mi>q</mi><mi>i</mi></msub><mo>(</mo><msub><mi>w</mi><mi>i</mi></msub><mo>+</mo><mi>k</mi><mo>)</mo><mo>(</mo><msub><mi>h</mi><mi>i</mi></msub><mo>+</mo><mi>k</mi><mo>)</mo></mrow>
      <mrow><mo>(</mo><mi>W</mi><mo>+</mo><mi>k</mi><mo>)</mo><mo>(</mo><mi>H</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow>
    </mfrac>
    <mo>&#x2309;</mo>
  </mrow>
</math>
B_min = |~ (sum_i q_i (w_i + k)(h_i + k)) / ((W + k)(H + k)) ~|
Ceiling[Total[q*(w + k)*(h + k)]/((W + k)*(H + k))]
Bmin := ceil(add(q[i]*(w[i] + k)*(h[i] + k), i = 1 .. n)/((W + k)*(H + k)));
Bmin = ceil(sum(q .* (w + k) .* (h + k))/((W + k)*(H + k)));
B_min = ⌈(∑_i q_i (w_i + k)(h_i + k))/((W + k)(H + k))⌉
能省的張數與概算費用
Δ = B分 − B,  T = u × B
\Delta = B_{\text{分}} - B,\quad T = u \times B
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mrow>
    <mi>&#x394;</mi>
    <mo>=</mo>
    <msub><mi>B</mi><mtext>分</mtext></msub>
    <mo>&#x2212;</mo>
    <mi>B</mi>
    <mo>,</mo>
    <mi>T</mi>
    <mo>=</mo>
    <mi>u</mi>
    <mo>&#xD7;</mo>
    <mi>B</mi>
  </mrow>
</math>
Delta = B_"分" - B,  T = u * B
{bSep - b, u*b}
Delta := Bsep - B;  T := u*B;
Delta = Bsep - B; T = u*B;
Δ = B_分 − B, T = u × B

請 ChatGPT  幫忙計算的方法

你是夾板取料(開料)的計算助理。請務必實際執行 Python 程式碼來進行下面的計算,並只根據執行結果的數值回答(不要用心算或推測回答)。

從 1820 × 910 mm(3 × 6 尺)的夾板,在鋸路 3 mm、零件可以轉 90° 的條件下,裁出頂板 900 × 450 mm × 2 片、側板 700 × 400 mm × 4 片、層板 600 × 350 mm × 3 片。
請分別求出下列數值。
1. 每種零件只排同一種時,一張板材能裁的片數(⌊(1820+3) ÷(寬+3)⌋ × ⌊(910+3) ÷(高+3)⌋,也計算交換寬和高的方向,取較多的)
2. 每種零件各用不同板材裁切時的板材合計張數(需要片數 ÷ 能裁片數無條件進位的合計)
3. 把零件依高度由高到低排列,從上往下做出橫跨板材的層並排入的分層排列法(First Fit Decreasing Height,同一層內每次往右前進寬+鋸路,層與層之間每次往下前進高+鋸路)配置時的板材張數,以及每張板材上零件的位置
4. 剩料面積(板材總面積 − 零件總面積)和利用率(%)
5. 由面積求出的理論最少張數(全部零件的(寬+3)×(高+3)合計除以 (1820+3) × (910+3) 再無條件進位)

請列出計算用的程式碼和執行結果的數值。

使用方法
  1. 1
    輸入數值
    在輸入欄中輸入要計算的數值
  2. 2
    計算
    按下「計算」按鈕
  3. 3
    查看結果
    計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
  DataChef 的特色
簡單又免費
免費且無使用次數限制
不需專業知識,操作直覺又簡單
免註冊會員
開啟頁面即可立即使用
無須登錄任何個人資料
安全又安心
通訊全程高度加密
按下「下載」後自動刪除檔案
高速
顯示與轉換都快速順暢,毫無等待壓力
無浮水印
沒有浮水印
無須標註來源出處
可商業使用
可免費用於商業用途
亦無須事先取得商用授權