Vul de afmetingen van de plaat, het zaagverlies, de nerfrichting en de breedte, hoogte en het aantal van elk onderdeel in (maximaal 8 soorten; rijen zonder breedte en hoogte worden genegeerd). De dikte en de prijs per plaat mogen leeg blijven.
Inhoudsopgave
-
Wat je op deze pagina kunt doen
-
Waarvoor is deze berekening handig?
-
Zo werkt het
-
Formules en tekeningen
-
Aantal stuks per plaat bij één soort onderdeel
-
Aantal platen bij los kopen per onderdeel
-
Rijenmethode (wanneer onderdelen in een rij passen en wanneer rijen op een plaat passen)
-
Oppervlakte van het restant en rendement
-
Theoretisch minimum aantal platen uit de oppervlakte (ondergrens)
-
Bespaarde platen en geschatte kosten
-
-
Symbolen en begrippen
-
Handig om vooraf te weten
-
Berekenen met Excel
-
Berekenen met Google Spreadsheets
-
Berekenen met Python
-
De formule in LaTeX en andere wiskundenotaties (om te kopiëren)
-
Zo laat je ChatGPT de berekening doen
-
Kenmerken van DataChef
-
Gerelateerde functies
-
Alle rekenmachines van NumberChef
Wat je op deze pagina kunt doen
- Vul de afmetingen van de plaat in (kies 2440 × 1220 mm of een ander formaat uit de lijst, of typ ze zelf in) en de breedte, hoogte en het aantal van elk onderdeel dat je nodig hebt (maximaal 8 soorten), en je ziet meteen hoeveel platen je moet kopen
- Het zaagverlies (de dikte van het zaagblad, standaard 3 mm) en de nerfrichting (mag je onderdelen een kwartslag draaien?) worden meegerekend. Bij één soort onderdeel telt de rekenmachine een raster van “breed × hoog” (ook met het gedraaide onderdeel en met gedraaide onderdelen in de overgebleven strook). Bij meer soorten worden ze gecombineerd met de rijenmethode: rij voor rij vullen, te beginnen met het hoogste onderdeel
- Je krijgt per plaat een gekleurd zaagplan dat laat zien wat waar komt, en een tabel zoals “Plaat 1: Top × 2 + Zij × 2, restant 0,522 m²”. Ook zie je hoeveel platen gecombineerd zagen bespaart ten opzichte van elk onderdeel uit eigen platen zagen
- De oppervlakte van het restant, het rendement (totale oppervlakte van de onderdelen ÷ totale oppervlakte van de platen) en het theoretische minimum aantal platen uit de oppervlakte (de ondergrens) staan erbij, met de vraag of het zaagplan daarmee overeenkomt. Vul de prijs per plaat in (optioneel) en je krijgt ook de geschatte kosten
- Op deze pagina vind je ook een uitleg van de formules in gewone taal en formules om te kopiëren voor Excel, Google Spreadsheets en Python
Waarvoor is deze berekening handig?
Stel dat je een klus maakt van multiplex van 2440 × 1220 mm met 2 bovenplaten van 1200 × 600 mm, 4 zijwanden van 940 × 540 mm en 3 legplanken van 800 × 470 mm. Per onderdeel apart kopen kost 3 platen, maar gecombineerd zagen met rijen op hoogte kost er maar 2 (plaat 1: 2 bovenplaten + 2 zijwanden; plaat 2: 2 zijwanden + 3 legplanken).
Platen multiplex zijn log, moeilijk in een auto te krijgen en lastig op te bergen als je er te veel koopt. Als je het aantal platen en het zaagplan vóór het winkelen vastlegt, voorkom je verspilling. Kies “Uitgelijnd houden” bij decoratief multiplex waarvan de nerf op één lijn moet liggen, en “Maakt niet uit” bij constructiemultiplex of platen die je gaat verven, om platen te besparen.
Veel bouwmarkten en houthandels hebben een zaagservice met een plaatzaag, die alleen in een rechte lijn van de ene rand van de plaat naar de andere kan zagen. Sommige winkels doen een paar zaagsneden gratis en rekenen daarna per zaagsnede, en sommige beperken het aantal zaagsneden per plaat; vraag het na bij jouw winkel. De tekening van het zaagplan op deze pagina volgt zulke zaagsneden (doorlopende zaagsneden), dus je kunt duidelijke instructies geven aan de hand van de tekening, zoals “zaag de plaat eerst door op 600 mm van de bovenrand en zaag de bovenste strook dan op 1200 mm van links” (het zaagverlies is wat het blad wegzaagt, dus de plekken van de zaagsneden zijn de maten van de onderdelen zelf).
Als je de zaagsneden vooraf telt, heb je een idee van de kosten en weet je of je binnen een eventuele limiet blijft. Stel het zaagverlies in op het blad van de plaatzaag van de winkel (vraag het gerust). Sommige winkels zagen heel smalle stroken, hoeken of zaagsneden die halverwege stoppen niet; check het dus eerst als je veel dunne onderdelen nodig hebt.
Een plaat van 2440 × 1220 mm in acht gelijke stukken van 610 × 610 mm verdelen lijkt zonder zaagverlies 8 stuks op te leveren, maar met 3 mm zaagverlies krijg je maar \(\lfloor 2.443 \div 613 \rfloor = 3\) breed en \(\lfloor 1.223 \div 613 \rfloor = 1\) hoog, dus 3 stuks. Maak je ze 606 × 606 mm, dan krijg je \(\lfloor 2.443 \div 609 \rfloor = 4\) breed en \(\lfloor 1.223 \div 609 \rfloor = 2\) hoog, dus 8 stuks.
Als je een maat in het ontwerp een beetje aanpast, kan dat veel schelen in het aantal platen. Probeer met deze rekenmachine vóór het winkelen aanpassingen, zoals de legplanken 4 mm minder diep maken of een bovenplaat in twee stukken verdelen, om materiaal te besparen.
In meubelmakerijen, timmerwerkplaatsen, reclamebedrijven (aluminium composietplaten en acrylplaten) en plaatwerkerijen vormt het materiaal een groot deel van de kosten, dus hoe onderdelen uit platen worden gezaagd (nesting) en het rendement worden elke dag bijgehouden. Het “rendement” op deze pagina, de totale oppervlakte van de onderdelen gedeeld door de totale oppervlakte van de platen, heeft dezelfde definitie als in de industrie.
In echte bedrijven worden honderden soorten onderdelen ingedeeld, dus gebruiken ze speciale nestingsoftware. De rijenmethode is een klassieke heuristiek voor het indelen van rechthoeken in het vlak en een van de ideeën achter zulke software.
Alles waarbij je rechthoeken uit platen van een standaardformaat zaagt, reken je met dezelfde formules als multiplex: acryl- en pvc-platen, gipsplaat, decoratieve platen, OSB enzovoort. Bij materialen die je kerft en breekt, zoals glas of gipsplaat, stel je het zaagverlies in op 0 (bij tegels ook, als je een handmatige tegelsnijder gebruikt; gebruik je een natte zaag, vul dan de breedte van het blad in), en kies je bij materialen zonder nerf “Maakt niet uit” om het aantal te verlagen.
Glas en dun acryl scheuren makkelijk en platen met een patroon hebben beperkingen in de richting, dus pas het zaagverlies en het draaien aan op het materiaal.
Formules en tekeningen
Symbolen en begrippen
Symbolen
| \(W\) | hoofdletter W | De breedte van de plaat (mm), de lengte van de ene zijde naar de andere van één plaat die je koopt. De eerste letter van “breedte” (width), als hoofdletter om het te onderscheiden van de breedte van een onderdeel \(w\). |
| \(H\) | hoofdletter H | De hoogte van de plaat (mm), de lengte van boven naar beneden van één plaat. De eerste letter van “hoogte” (height), als hoofdletter om het te onderscheiden van de hoogte van een onderdeel \(h\). Maakt de nerfrichting niet uit, dan verandert het aantal niet als je breedte en hoogte verwisselt (bij “Uitgelijnd houden” moet het bij de richting van de onderdelen passen). |
| \(w\), \(w_i\) | w, w index i | De breedte van een onderdeel (een stuk dat je wilt zagen, mm). De \(i\) in \(w_i\) is het nummer van de soort onderdeel (“de \(i\)-de soort”), omdat er meerdere soorten zijn, zoals bovenplaten, zijwanden en legplanken. |
| \(h\), \(h_i\) | h, h index i | De hoogte van een onderdeel (mm). In de formule van de rijenmethode staan \(h_1,\ h_2,\ \ldots\) ook voor de hoogte van elke rij (de hoogte van het hoogste onderdeel in die rij). |
| \(k\) | k | Het zaagverlies (de dikte van het zaagblad, mm). Bij elke zaagsnede gaat zoveel van de plaat verloren. De letter komt van het Engelse “kerf” (de zaagsnede). |
| \(c\) | c | Het aantal stuks naast elkaar langs de breedte van de plaat als je één soort onderdeel zaagt, berekend met \(\lfloor (W + k) \div (w + k) \rfloor\). De eerste letter van “column” (kolom). |
| \(r\) | r | Het aantal stuks boven elkaar langs de hoogte van de plaat als je één soort onderdeel zaagt, berekend met \(\lfloor (H + k) \div (h + k) \rfloor\). De eerste letter van “row” (rij). |
| \(m\), \(m_i\) | m, m index i | Het aantal stuks per plaat als je één soort onderdeel zaagt: het aantal breed \(c\) maal het aantal hoog \(r\), \(m = c \times r\). |
| \(q_i\) | q index i | Het benodigde aantal van onderdeel \(i\), van de eerste letter van “quantity” (hoeveelheid). |
| \(B_i\) | B index i | Het aantal platen dat nodig is voor alleen onderdeel \(i\), berekend met \(\lceil q_i \div m_i \rceil\). |
| \(B_{\text{sep}}\) | B sep | Het totale aantal platen als je elk onderdeel uit eigen platen zaagt (los koopt): alle \(B_i\) bij elkaar opgeteld. “sep” staat voor “separaat” (los). |
| \(B\) | B | Het aantal platen dat je nodig hebt bij gecombineerd zagen (rijenmethode en dergelijke). Dit is het belangrijkste antwoord op deze pagina. |
| \(n\) | n | Het aantal onderdelen naast elkaar in één rij. Daartussen zitten \(n - 1\) keer zaagverlies, dus het komt voor in de voorwaarde om in een rij te passen. De eerste letter van “number” (aantal). |
| \(s\) | s | Het aantal rijen op één plaat. Daartussen zitten \(s - 1\) keer zaagverlies, dus het komt voor in de voorwaarde dat de rijen passen. De eerste letter van “shelf”, want de rijen heten in de rijenmethode in het Engels “shelves”. |
| \(A_{\text{off}}\) | A off | De oppervlakte van het restant (mm², m²). Het is de totale oppervlakte van de gekochte platen min de totale oppervlakte van de onderdelen, en daar zit ook bij wat bij het zaagverlies in zaagsel verandert. De \(A\) is de eerste letter van “area” (oppervlakte) en “off” staat voor “offcut” (restant). |
| \(Y\) | Y | Het rendement (%), de totale oppervlakte van de onderdelen gedeeld door de totale oppervlakte van de platen, maal 100. De eerste letter van “yield” (opbrengst). |
| \(B_{\min}\) | B min | Het theoretische minimum aantal platen uit de oppervlakte (de ondergrens), berekend met \(\lceil \sum_i q_i (w_i + k)(h_i + k) \div ((W + k)(H + k)) \rceil\). Komt het aantal platen bij gecombineerd zagen \(B\) daarmee overeen, dan is het zaagplan optimaal. “min” is de afkorting van minimum. |
| \(\Delta\) | delta | Het aantal bespaarde platen, \(B_{\text{sep}} - B\). De Griekse letter delta wordt vaak gebruikt voor een verschil (het komt overeen met de d van “difference”). |
| \(u\) | u | De prijs van één plaat (€), van “unit price” (prijs per stuk). |
| \(T\) | T | De geschatte kosten (€), van de eerste letter van “total” (totaal). Het gaat alleen om de platen, niet om zaagkosten of bezorging. |
| \(\lfloor x \rfloor\) | entier van x (naar beneden afronden) | Het teken voor naar beneden afronden op een geheel getal. (Voorbeeld: \(\lfloor 3{,}04 \rfloor = 3\), \(\lfloor 2 \rfloor = 2\).) Het aantal stuks dat je kunt zagen laat het deel weg dat niet meer past, daarom gebruiken we dit teken. |
| \(\lceil x \rceil\) | plafond van x (naar boven afronden) | Het teken voor naar boven afronden op een geheel getal. (Voorbeeld: \(\lceil 1{,}55 \rceil = 2\), \(\lceil 2 \rceil = 2\).) Het aantal platen dat je koopt gaat met één omhoog voor wat er nog tekortkomt, daarom gebruiken we dit teken. |
| \(\sum\) | sigma | Het teken voor “alles optellen”. \(\sum_i q_i w_i h_i\) betekent: bereken voor elke soort onderdeel \(i\) het product \(q_i w_i h_i\) (aantal × breedte × hoogte) en tel alles op. Het is de Griekse hoofdletter sigma, de S van “som”. |
Begrippen
| plaat | De grote plaat waaruit je de onderdelen zaagt. Het kan elk plaatmateriaal zijn dat in standaardformaten wordt verkocht, zoals multiplex, MDF, decoratieve platen, acryl of plaatstaal. Deze pagina behandelt het als een rechthoek van breedte \(W\) × hoogte \(H\). |
| zaagplan | Bepalen hoe je de onderdelen die je nodig hebt uit de platen zaagt (ook wel zaaglijst of snijplan genoemd). Deze pagina behandelt tweedimensionaal zagen, waarbij zowel de breedte als de hoogte telt; zagen op lengte alleen, zoals bij balken en buizen, doe je met de rekenmachine “Zaagplan maken”. |
| zaagverlies | De breedte van het materiaal die bij elke zaagsnede verloren gaat, gelijk aan de dikte van het zaagblad. Veel cirkelzaagbladen en plaatzagen hebben een blad van ongeveer 1,5 tot 3 mm dik. Kijk of de dikte op je zaagblad staat en vul die in als je die weet. Het loopt op bij elke zaagsnede, dus het telt het zwaarst als je veel kleine onderdelen zaagt. |
| nerfrichting | De richting van de houtvezels, die je ziet als het patroon op het oppervlak van een plaat. Bij decoratief multiplex of massief hout zien onderdelen er raar uit als de nerf niet overal dezelfde kant op loopt, dus soms mag je onderdelen niet een kwartslag draaien. Op deze pagina kies je bij “Nerfrichting” of onderdelen mogen draaien. Bij constructiemultiplex of platen die je gaat verven is “Maakt niet uit” prima. |
| doorlopende zaagsnede (guillotinesnede) | Een zaagsnede die in een rechte lijn van de ene rand van de plaat naar de andere loopt. De stukken zaag je daarna weer van rand tot rand, enzovoort, tot de onderdelen los zijn. De plaatzagen van een zaagservice kunnen alleen zo zagen, dus deze rekenmachine beperkt het zaagplan tot vormen die zo te zagen zijn (rijenmethode). Zaagsneden die halverwege stoppen (L-vormige uitsparingen) kunnen soms nog dichter bij elkaar passen, maar ze zijn ook lastig met een cirkelzaag thuis, dus ze worden niet gebruikt. |
| rijenmethode (FFDH) | Een werkwijze voor het zaagplan waarbij je de onderdelen van hoog naar laag sorteert en van boven naar beneden rijen over de plaat vult. FFDH staat voor First Fit Decreasing Height (hoogste eerst, in de eerste rij waar het past), een klassieke heuristiek voor het indelen van rechthoeken in het vlak. Elke zaagsnede loopt van rand tot rand, dus het zaagplan kan direct naar een zaagservice. Voor zo’n eenvoudige werkwijze geeft het goede resultaten, maar niet altijd het minste aantal platen. |
| restant | Het materiaal dat overblijft nadat de onderdelen zijn gezaagd, zoals lange smalle stroken aan de rand van de plaat of reststukjes aan het eind van een rij. Hoe minder restant, hoe minder verspild materiaal en hoe hoger het rendement. Van grote restanten kun je kleine plankjes of dragers maken. |
| rendement | Het aandeel van het materiaal dat product (onderdelen) is geworden. Op deze pagina is het “totale oppervlakte van de onderdelen ÷ totale oppervlakte van de gekochte platen” en het komt dichter bij 100% met minder restant en minder zaagverlies. |
| ondergrens | Een waarde waar je, hoe slim je ook bent, nooit onder komt. Het theoretische minimum aantal platen op deze pagina is een ondergrens uit de oppervlakte; gebruikt het zaagplan zoveel platen, dan is het optimaal. Ook als dat niet zo is, haal je de ondergrens bij tweedimensionaal zagen door de vorm van de onderdelen vaak niet. |
| optimale oplossing | Het beste antwoord van alle mogelijke manieren. Hier is dat het zaagplan met het minste aantal platen. Komt het aantal platen bij gecombineerd zagen overeen met de ondergrens, dan is het een optimale oplossing; zo niet, dan doorzoekt deze rekenmachine niet alle combinaties en kan ze dus niet zeggen of het zaagplan optimaal is. |
| heuristiek (vuistregel) | Een methode die met vaste stappen snel een goed antwoord vindt, maar niet garandeert dat het beste antwoord eruit komt. Bij combinatieproblemen zoals een zaagplan loopt het aantal mogelijke indelingen enorm op als er onderdelen bijkomen, zodat je niet alle kunt proberen en heuristieken in de praktijk veel worden gebruikt. De rijenmethode en het raster op deze pagina zijn ook heuristieken. |
| multiplex | Een plaat die is gemaakt door dunne lagen hout (fineer) op elkaar te lijmen, steeds met de nerf haaks op de laag eronder. Het trekt weinig krom en kan in grote platen worden gemaakt, dus het wordt veel gebruikt voor kasten, kisten en vloeren. Er is constructiemultiplex, geschuurd multiplex (zoals berken of populier) en decoratief multiplex. Gebruikelijke diktes zijn bijvoorbeeld 9, 12 en 18 mm. In Nederland is een plaat multiplex meestal 2440 of 2500 mm lang en 1220 mm breed. |
| OSB | Oriented strand board, een plaat van geperste en gelijmde houtspanen. Het is een veelgebruikt, goedkoop plaatmateriaal voor wanden, daken en vloeren, dat net als multiplex in grote platen wordt verkocht. Het oppervlak is ruw, dus het wordt vooral gebruikt waar het afgewerkt wordt. |
| standaardplaat 2440 × 1220 mm | Het veelgebruikte plaatformaat van 2440 × 1220 mm (8 × 4 ft) voor multiplex en andere platen. Het is de standaardkeuze op deze pagina. Ook 2500 × 1220 mm komt voor. Het formaat verschilt per product en winkel, dus vul de maat van jouw plaat in. |
| grote plaat 3050 × 1525 mm | Een groter plaatformaat van 3050 × 1525 mm (10 × 5 ft), dat vooral bij berkenmultiplex voorkomt. Gebruik het voor hoge wanden en lange onderdelen zonder naad. Controleer de exacte maat van het product dat je koopt en vul die in. |
| kleine plaat | Een kleinere, voorgezaagde plaat die in bouwmarkten wordt verkocht. Hij is makkelijker mee te nemen, maar kost per vierkante meter meestal meer dan een hele plaat van 2440 × 1220 mm. |
Handig om vooraf te weten
Dit helpt je om de berekening op deze pagina te gebruiken met echt begrip, en niet alleen door op de knop te drukken.
| Delen met rest (groep 5-6, 8-10 jaar) |
|
| Afronden (groep 5-6, 8-10 jaar) |
|
| Oppervlakte van een rechthoek (groep 5-6, 8-10 jaar) |
|
| Verhoudingen en procenten (groep 7, 10-11 jaar) |
|
| Formules met letters en ongelijkheden (klas 1-2, 12-14 jaar) |
|
Berekenen met Excel
| Breedte van de plaat (mm) | 2440 |
| Hoogte van de plaat (mm) | 1220 |
| Breedte van het onderdeel (mm) | 800 |
| Hoogte van het onderdeel (mm) | 500 |
| Zaagverlies (mm) | 3 |
| Aantal breed | =INTEGER((B1+B5)/(B3+B5)) |
| Aantal hoog | =INTEGER((B2+B5)/(B4+B5)) |
| Aantal stuks per plaat | =B6*B7 |
| Benodigd aantal van het onderdeel | 8 |
| Aantal stuks per plaat | 6 |
| Benodigd aantal platen | =AFRONDEN.NAAR.BOVEN(B1/B2;0) |
| Aantal platen | 2 |
| Breedte van de plaat (mm) | 2440 |
| Hoogte van de plaat (mm) | 1220 |
| Totale oppervlakte van alle onderdelen (mm²) | 3200000 |
| Oppervlakte restant (mm²) | =B1*B2*B3-B4 |
| Oppervlakte restant (m²) | =B5/1000000 |
| Rendement (%) | =B4/(B1*B2*B3)*100 |
| Som van (breedte + zaagverlies) × (hoogte + zaagverlies) van alle onderdelen (mm²) | 4638471 |
| (Breedte plaat + zaagverlies) × (hoogte plaat + zaagverlies) (mm²) | 2987789 |
| Theoretisch minimum aantal platen | =AFRONDEN.NAAR.BOVEN(B1/B2;0) |
| Aantal platen bij los kopen | 3 |
| Aantal platen bij gecombineerd zagen | 2 |
| Prijs per plaat (€) | 85 |
| Bespaarde platen | =B1-B2 |
| Geschatte kosten (€) | =B3*B2 |
“INTEGER(waarde)” rondt naar beneden af op een geheel getal (de ⌊ ⌋ in de formules) en “AFRONDEN.NAAR.BOVEN(waarde; 0)” rondt naar boven af (de ⌈ ⌉).
B8 in de eerste tabel is 6 stuks (3 breed × 2 hoog). B3 in de tweede tabel is 2 platen. In de derde tabel (acht onderdelen van 800 × 500 mm op twee platen) is B6 ongeveer 2,7536 m² en B7 ongeveer 53,75%. B3 in de vierde tabel is 2 platen en de vijfde tabel geeft 1 bespaarde plaat en kosten van € 170.
De rijenmethode zelf is onderdelen op hoogte sorteren en van boven naar beneden in rijen leggen, en dat is handwerk. Gebruik het spreadsheet om het aantal stuks per plaat, het restant en de ondergrens te controleren en maak het zaagplan op deze pagina of met de Python-code hieronder.
Berekenen met Google Spreadsheets
| Breedte van de plaat (mm) | 2440 |
| Hoogte van de plaat (mm) | 1220 |
| Breedte van het onderdeel (mm) | 800 |
| Hoogte van het onderdeel (mm) | 500 |
| Zaagverlies (mm) | 3 |
| Aantal breed | =INTEGER((B1+B5)/(B3+B5)) |
| Aantal hoog | =INTEGER((B2+B5)/(B4+B5)) |
| Aantal stuks per plaat | =B6*B7 |
| Benodigd aantal van het onderdeel | 8 |
| Aantal stuks per plaat | 6 |
| Benodigd aantal platen | =AFRONDEN.NAAR.BOVEN(B1/B2;0) |
| Aantal platen | 2 |
| Breedte van de plaat (mm) | 2440 |
| Hoogte van de plaat (mm) | 1220 |
| Totale oppervlakte van alle onderdelen (mm²) | 3200000 |
| Oppervlakte restant (mm²) | =B1*B2*B3-B4 |
| Oppervlakte restant (m²) | =B5/1000000 |
| Rendement (%) | =B4/(B1*B2*B3)*100 |
| Som van (breedte + zaagverlies) × (hoogte + zaagverlies) van alle onderdelen (mm²) | 4638471 |
| (Breedte plaat + zaagverlies) × (hoogte plaat + zaagverlies) (mm²) | 2987789 |
| Theoretisch minimum aantal platen | =AFRONDEN.NAAR.BOVEN(B1/B2;0) |
| Aantal platen bij los kopen | 3 |
| Aantal platen bij gecombineerd zagen | 2 |
| Prijs per plaat (€) | 85 |
| Bespaarde platen | =B1-B2 |
| Geschatte kosten (€) | =B3*B2 |
Berekenen met Python
import math
sheet_w, sheet_h = 2440, 1220 # breedte en hoogte van de plaat (mm)
kerf = 3 # zaagverlies (dikte zaagblad, mm)
rotate = True # True als de nerfrichting niet uitmaakt (onderdelen mogen een kwartslag draaien)
unit_price = 85 # prijs van één plaat (€)
# Onderdelen die je wilt zagen: (naam, breedte mm, hoogte mm, aantal)
parts = [("Top", 1200, 600, 2), ("Zij", 940, 540, 4), ("Plank", 800, 470, 3)]
# Aantal platen bij los kopen per onderdeel (raster breed × hoog; mag je draaien, probeer dan ook het gedraaide onderdeel)
def per_sheet(w, h):
return ((sheet_w + kerf) // (w + kerf)) * ((sheet_h + kerf) // (h + kerf)) # naar beneden afronden (de ⌊ ⌋ in de formules)
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) # naar boven afronden (de ⌈ ⌉ in de formules)
# Gecombineerd zagen: rijenmethode (hoogste eerst, in de eerste rij waar het past; mag je draaien, dan de lange zijde breed)
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 = [] # per plaat {"y": waar de volgende rij begint, "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)]}]})
# Restant, rendement en de ondergrens uit de oppervlakte
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"Bij los kopen per onderdeel: {sheets_separate} platen")
print(f"Gecombineerd zagen (rijenmethode): {len(sheets)} platen (ondergrens uit de oppervlakte {lower_bound})")
for i, sheet in enumerate(sheets, 1):
for shelf in sheet["shelves"]:
print(f" Plaat {i} rij (y={shelf['y']}): " + ", ".join(f"{n}@x={x} {pw}x{ph}" for n, x, y, pw, ph in shelf["parts"]))
print(f"Oppervlakte restant: {(total_area - parts_area) / 1e6:.3f} m² Rendement: {parts_area / total_area * 100:.1f} %")
print(f"Geschatte kosten: € {unit_price * len(sheets)}")
De formule in LaTeX en andere wiskundenotaties (om te kopiëren)
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>⌊</mo>
<mfrac>
<mrow><mi>W</mi><mo>+</mo><mi>k</mi></mrow>
<mrow><mi>w</mi><mo>+</mo><mi>k</mi></mrow>
</mfrac>
<mo>⌋</mo>
<mo>,</mo>
<mi>r</mi>
<mo>=</mo>
<mo>⌊</mo>
<mfrac>
<mrow><mi>H</mi><mo>+</mo><mi>k</mi></mrow>
<mrow><mi>h</mi><mo>+</mo><mi>k</mi></mrow>
</mfrac>
<mo>⌋</mo>
<mo>,</mo>
<mi>m</mi>
<mo>=</mo>
<mi>c</mi>
<mo>×</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ᵢ⌉, Bsep = B₁ + B₂ + …
B_i = \left\lceil \frac{q_i}{m_i} \right\rceil,\quad B_{\text{sep}} = \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>⌈</mo>
<mfrac><msub><mi>q</mi><mi>i</mi></msub><msub><mi>m</mi><mi>i</mi></msub></mfrac>
<mo>⌉</mo>
<mo>,</mo>
<msub><mi>B</mi><mtext>sep</mtext></msub>
<mo>=</mo>
<munder><mo>∑</mo><mi>i</mi></munder>
<msub><mi>B</mi><mi>i</mi></msub>
</mrow>
</math>
B_i = |~ q_i / m_i ~|, B_"sep" = 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_sep = ∑_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>∑</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>−</mo><mn>1</mn><mo>)</mo><mi>k</mi>
<mo>≤</mo>
<mi>W</mi>
<mo>,</mo>
<munderover><mo>∑</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>−</mo><mn>1</mn><mo>)</mo><mi>k</mi>
<mo>≤</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
Aoff = B × W × H − Σ qᵢ wᵢ hᵢ, Y = Σ qᵢ wᵢ hᵢ ÷ (B × W × H) × 100
A_{\text{off}} = 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>off</mtext></msub>
<mo>=</mo>
<mi>B</mi><mo>⁢</mo><mi>W</mi><mo>⁢</mo><mi>H</mi>
<mo>−</mo>
<munder><mo>∑</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>∑</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>⁢</mo><mi>W</mi><mo>⁢</mo><mi>H</mi></mrow>
</mfrac>
<mo>×</mo>
<mn>100</mn>
</mrow>
</math>
A_"off" = 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_off = 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>⌈</mo>
<mfrac>
<mrow><munder><mo>∑</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>⌉</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))⌉
Δ = Bsep − B, T = u × B
\Delta = B_{\text{sep}} - B,\quad T = u \times B
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>Δ</mi>
<mo>=</mo>
<msub><mi>B</mi><mtext>sep</mtext></msub>
<mo>−</mo>
<mi>B</mi>
<mo>,</mo>
<mi>T</mi>
<mo>=</mo>
<mi>u</mi>
<mo>×</mo>
<mi>B</mi>
</mrow>
</math>
Delta = B_"sep" - B, T = u * B
{bSep - b, u*b}
Delta := Bsep - B; T := u*B;
Delta = Bsep - B; T = u*B;
Δ = B_sep − B, T = u × B
Zo laat je ChatGPT de berekening doen
Je bent een rekenassistent voor zaagplannen van platen (multiplex). Voer de volgende berekening uit door echt Python-code uit te voeren en baseer je antwoord alleen op de getallen uit het resultaat van de uitvoering (geef geen antwoord uit hoofdrekenen of gokken). Uit platen multiplex van 2.440 × 1.220 mm, met een zaagverlies van 3 mm en onderdelen die een kwartslag mogen draaien, zaag ik 2 bovenplaten van 1.200 × 600 mm, 4 zijwanden van 940 × 540 mm en 3 legplanken van 800 × 470 mm. Bereken elk van de volgende dingen: 1. Per onderdeel het aantal stuks per plaat als je alleen dat onderdeel zaagt (⌊(2.440 + 3) ÷ (breedte + 3)⌋ × ⌊(1.220 + 3) ÷ (hoogte + 3)⌋; reken ook met breedte en hoogte verwisseld en neem het grootste) 2. Het totale aantal platen als je elk onderdeel uit eigen platen zaagt (de som van “aantal ÷ stuks per plaat, naar boven afgerond”) 3. Het aantal platen en de plek van elk onderdeel op elke plaat met de rijenmethode: sorteer de onderdelen van hoog naar laag en vul van boven naar beneden rijen over de plaat (First Fit Decreasing Height; binnen een rij schuift elk onderdeel breedte + zaagverlies naar rechts en elke rij schuift hoogte + zaagverlies naar beneden) 4. De oppervlakte van het restant (totale oppervlakte van de platen − totale oppervlakte van de onderdelen, in m²) en het rendement (%) 5. Het theoretische minimum aantal platen uit de oppervlakte (de som van (breedte + 3) × (hoogte + 3) van alle onderdelen, gedeeld door (2.440 + 3) × (1.220 + 3), naar boven afgerond) Laat de code zien die je hebt gebruikt en de getallen uit het resultaat van de uitvoering.
Zo werkt het
-
1Vul je getallen inTyp de getallen waarmee je wilt rekenen in de invoervelden
-
2BerekenKlik op de knop “Berekenen”
-
3Bekijk het resultaatHet resultaat verschijnt meteen. Op dezelfde pagina vind je ook de uitwerking van de berekening en de uitleg van de formule
Kenmerken van DataChef
Geen voorkennis nodig – intuïtieve en eenvoudige bediening
Zonder persoonlijke gegevens op te geven
Bestand wordt automatisch verwijderd zodra je op "Downloaden" klikt
Geen bronvermelding vereist
Geen toestemming vooraf nodig