Раскладка кварцвинила ряд за рядом: почему «+10% на подрезку» то много, то мало

Калькулятор, который кладёт планки как мастер: обрезок с конца ряда начинает следующий, у обрезков две кучки из-за замка, узкий последний ряд делят с первым. На цифрах: в зале 10% — лишняя упаковка, в санузле — не хватает.

Сколько брать кварцвинила или ламината? Обычный ответ: площадь пола плюс 10% на подрезку, делим на площадь упаковки. Так советуют в магазинах, так считают многие калькуляторы.

Когда я делал калькулятор кварцвинила, захотелось проверить эти 10%. Калькулятор не умножает площадь на коэффициент, а раскладывает планки в комнате ряд за рядом, как это делает мастер, и считает, сколько целых планок ушло. Вышло, что 10% — число среднее по больнице: в большой комнате это лишняя упаковка, в маленьком санузле планок не хватит.

Что не знает формула площади

Отход зависит не от площади, а от того, как ложатся ряды:

  • Остаток в конце ряда. Ряд 4,99 м и планка 1,22 м — это четыре целые и кусок 11 см. Куда пойдёт оставшийся метр с лишним, решает следующий ряд.
  • Рисунок укладки. Вразбежку обрезок с конца ряда сразу начинает следующий. Со смещением на половину стыки стоят по сетке, и обрезок нужной длины есть не всегда.
  • Замок. У отпиленной планки замок остаётся только на одном конце. Об этом подробнее ниже, это главная деталь.
  • Короткие куски. Кусок короче 20 см у стены не кладут: короткий плохо держится в замке. Значит, такой обрезок — сразу отход, и ряд нельзя заканчивать слишком коротким куском.
  • Последний ряд. Ширина комнаты редко кратна ширине планки, последний ряд режут вдоль.

Формула «площадь × 1,1» ничего из этого не видит.

Как калькулятор кладёт ряды

Ряды поперёк комнаты

Сначала комната делится на ряды по ширине планки. Если последний ряд выходит полоской уже трети планки, мастера режут вдоль первый и последний ряд поровну: узкая полоска у стены отходит и выглядит плохо. Калькулятор делает так же. Комната 6×3,5 м, планка шириной 18,3 см: в лоб последний ряд вышел бы полоской 1,3 см, а так первый и последний — по 9,8 см.

Для комнаты с нишами и выступами каждый ряд пересекается с контуром пола, и ряд распадается на куски от стены до стены. Дальше каждый кусок раскладывается отдельно. У плавающего пола от стен отступает зазор: 5 мм у кварцвинила, 10 мм у ламината.

Две кучки обрезков

Вот деталь, без которой подсчёт обрезков врёт. Замковая планка соединяется с соседями замками на торцах. Отпилили планку в конце ряда — в ряд ушла левая часть, а у оставшейся правой замок только справа. Значит, ею можно начать следующий ряд: левый конец уходит к стене, там замок не нужен. Закончить ряд ею нельзя.

Замок есть на обоих концах планки, а у отпиленной — только на одномРяд кончается у стеныв ряду: левый кусокобрезок: замок справа→ годится только в начало рядаРяд начали отпиленной планкойв ряду: правый кусокобрезок: замок слева→ годится только в конец ряда
Поэтому калькулятор держит две кучки обрезков: одной начинает ряды, другой заканчивает. Если от обрезка отпилить ещё кусок, у остатка замков не будет вовсе — он идёт в отход. Схему можно прокрутить вбок.

Поэтому обрезки лежат в двух кучках:

// starts — правые концы (остались от конца ряда), ими начинают ряд;
// ends — левые концы (остались, когда ряд начали отпиленной планкой), ими ряд заканчивают.
// Короче minPiece — в отход.
const keep = (pool, l) => { if (l >= m && l >= 1) pool.push(l); };
// Из кучки берём самый короткий обрезок, который подходит: длинные приберегаем
const take = (pool, need) => {
  let bi = -1;
  pool.forEach((l, i) => { if (l >= need && (bi < 0 || l < pool[bi])) bi = i; });
  return bi < 0 ? null : pool.splice(bi, 1)[0];
};

Если от обрезка отпилить ещё кусок, у остатка замков не будет совсем — это отход.

Вразбежку: сначала обрезок, потом новая планка

Ряд начинается так:

  1. Берём обрезок из кучки начал целиком. Но только если стыки этого ряда отходят от стыков прошлого хотя бы на 30 см, а кусок в конце ряда выходит не короче 20 см.
  2. Не подошёл как есть — пробуем подрезать его, по сантиметру.
  3. Только потом берём новую планку, по возможности целую.

Дальше ряд идёт целыми планками, а последний кусок у стены сначала ищется в кучке концов и только потом отпиливается от новой планки. Остаток уходит в кучку начал, к следующему ряду.

Комната 5×4 м, кварцвинил 122×18,3 см: 94 планок, отход 4,9%целаяотпиленнаяиз обрезка
Ряд начинается обрезком из прошлого ряда, если стыки отходят от соседних хотя бы на 30 см, иначе — новой планкой. Обрезков ушло в дело 16, а площадь с запасом 10% дала бы 99 планок. Схему можно прокрутить вбок.

Со смещением на треть или половину

Тут стыки стоят по сетке: каждый ряд сдвинут на 1/3 или 1/2 длины планки. Свобода одна — где начать сетку. Калькулятор перебирает сдвиг сетки с шагом 1 см и берёт тот, при котором самый короткий кусок у стен будет длиннее всего. Иначе у стены легко получить обрезок в 3 см.

Цифры

Кварцвинил 122×18,3 см, 10 планок в упаковке, зазор 5 мм:

Комната Укладка По раскладке Площадь +10%
7×5 м вразбежку 163 планки, 17 упаковок 173 планки, 18 упаковок
5×4 м вразбежку 94, 10 упаковок 99, 10 упаковок
5×4 м на половину 99, 10 упаковок 99, 10 упаковок
4×3 м вразбежку 57, 6 упаковок 60, 6 упаковок
3,2×2,8 м на половину 48, 5 упаковок 45, 5 упаковок
2,5×1,6 м вразбежку 20, 2 упаковки 20, 2 упаковки
2,5×1,6 м на половину 23, 3 упаковки 20, 2 упаковки

Ламинат 138×19,3 см, 8 досок в упаковке, зазор 10 мм:

Комната Укладка По раскладке Площадь +10%
7×5 м вразбежку 139 досок, 18 упаковок 145, 19 упаковок
5×4 м вразбежку 79, 10 упаковок 83, 11 упаковок
4×3 м вразбежку 48, 6 упаковок 50, 7 упаковок
2,5×1,6 м вразбежку 18, 3 упаковки 17, 3 упаковки

В больших комнатах вразбежку отход 4–6%, и 10% дают лишнюю упаковку. В маленьких отход доходит до 20–28%, и 10% не хватает.

Санузел, где 10% мало

Со смещением на половину23 планок · отход 28%Вразбежку20 планок · отход 12%целаяотпиленнаяиз обрезка
Санузел 2,5×1,6 м. Запас 10% — это 20 планок: для раскладки вразбежку хватит, для смещения на половину — нет, не хватит трёх, то есть ещё одной упаковки. Схему можно прокрутить вбок.

Почему со смещением на половину санузел 2,5×1,6 м съедает 28%? Ряд — 249 см, это две планки и кусок. Нечётные ряды начинаются куском 32,5 см, чётные — 93,5 см. В конце каждого ряда остаётся обрезок 27–28 см, а для начала нужно 32–33. Не хватает 5 см, и так в каждом ряду: две новые планки на ряд, а обрезки копятся в кучке. Ни один не годится.

Вразбежку калькулятор сам выбирает, каким обрезком начать ряд, поэтому почти каждый ряд начинается из кучки. В той же комнате — 20 планок вместо 23.

Для того, кто кладёт сам, вывод простой: в маленьком помещении не берите смещение на половину «потому что красиво», не посчитав. А если всё-таки берёте, 10% запаса не хватит. Не хватит трёх планок — ехать в магазин, а там может уже не быть той же партии: оттенок будет другой.

Где калькулятор не точен

  • Алгоритм жадный. Он идёт ряд за рядом и не перебирает все варианты, так что минимум не гарантирован. Мастер на месте может сэкономить ещё планку-другую.
  • Нет запаса на брак. Сломанный замок, скол, неудачный отпил — этого калькулятор не знает. Поэтому он прямо пишет: если кладёте впервые, возьмите ещё упаковку.
  • Огромные площади считаются по проценту. Если планок больше 20 000, раскладка в браузере займёт заметное время, и калькулятор переходит на запас в процентах.
  • Ёлочка — тоже по проценту, 15%: там своя геометрия и свои планки A и B.

Где попробовать

Калькулятор кварцвинила рисует раскладку на плане: целые, отпиленные и собранные из обрезков планки — разным цветом. Можно задать комнату с нишами, стены вместо пола, своё смещение стыков и самый короткий кусок. Калькулятор ламината работает на том же коде. Пример выше открывается одной ссылкой: санузел, смещение на половину.

Раскладка и схемы — чистый JavaScript в браузере, без сервера; сторонняя библиотека одна — для QR-кода со ссылкой на расчёт.