Ядро «Ролльни» в инженерных схемах: как выбор нарезки задаёт форму куска, что с ним делает раскладка, что — скрутка, и что в итоге показывает срез. Документ правится вместе с математикой; расхождение ловит сторож в state-check. ⚠ Сверено 05.09. Сторож с 05.09 падал на загрузке (URLSearchParams в песочнице vm, пришло с PR #172) — починено в PR #176, но пока он лежал, часть чисел на этой странице разъехалась и была поправлена руками. Кроме того у игры теперь второй набор снимков каталога — play/core-v2/units.js, в миллиметрах, — и он со state-check не сверяется (задача #174).
Цепочка начинается не с формы, а с решения, как резать. Один и тот же огурец даёт кружок, брусок или ломтик — в зависимости от того, куда пошёл нож. Форма сечения не свойство продукта, а следствие нарезки, и именно нарезку выбирает игрок.
⚠ Третий рез — косой — в игре пока не у кого. Вопрос владельца 01.09:
«это у чего такой?» Ответ: ни у чего. Профиль ломтик (линза, выпуклая
с обеих сторон) в коде есть, но ни одна начинка каталога его не использует —
перепись по — пересчёт 05.09: брусок 9 ·
присыпка 7 · лист 4 · кружок 3 · паста 2 · сектор 1 · полукруг 1, всего 27 записей,
а не 25. Класса cut: брусок 8 · присыпка 5 · лист 4 · кружок 3 · паста 2 ·
сектор 1 · полумесяц 1 · полукруг 1полумесяц в каталоге нет ни одного: форма снята
01.09 вместе с CRESCENT_INNER/CRESCENT_HALF
(geometry.js:515) и отображается в полукруг
(geometry.js:528). Ломтика по-прежнему нет.
Сам овал ножом получить можно: косой рез цилиндра даёт эллипс, это 斜め切り. Так что фигура учит верному приёму — просто игра его пока не предлагает. Чертёж здесь опережает каталог, и это надо либо догнать (завести начинку с косым резом), либо сказать вслух, что рез показан как принцип.
Кусок описан одним контуром, у которого две границы. Верхняя —
cutTop(lu), нижняя — cutLow(lu), где
lu отсчитывается поперёк куска от −0,5 до +0,5, а высота меряется в долях
собственной толщины куска.
Ребро не бывает острым — это было НАШЕ допущение, и оно снято 01.09.
Фаска ARRIS обнулена: справочник приёмов нарезки разобран целиком
(docs/ingredients.md, раздел 6-бис) — двадцать три способа, и ни в одном
не сказано, что ребро выходит скруглённым, везде описан прямой ход ножа. Наблюдение,
из которого фаска выросла («у маки края не бывают острыми»), верно, но относится к
готовому роллу, где начинку обжимает рис, а не к куску до скрутки. Скругление,
если оно нужно, должно появляться в намотке — issue #125.
Нижний контур задаёт сам профиль. Зеркало — не общее правило
с исключениями, а поведение отдельных профилей:
у бруска и кружка низ действительно зеркалит верх, у полукруга и сектора он
() => 0 (плоское дно), у полумесяца — своя дуга
() => 0. Каждое записано в самом профиле, а не
выведено допущением снаружи; флагов round / lens / flatBottom как способа
выбрать форму больше нет — форму задаёт класс нарезки cut.
Читаться они при этом ещё умеют: сохранённые роллы в альбоме и ссылки на пазл
записаны до перехода, а flatBottom вдобавок остался ручным снятием зеркала
для форм без своего класса — им и рисует чертёж Ф-4 ниже.
Блок формы лежит ниже в этом же файле — можно сверить.
Ссылка «см. Ф-6» вела не туда и тоже исправлена:
симметрии посвящена Ф-4, а Ф-6 — «Кусок на листе». Ошибка от того, что
у фигуры Ф-4 идентификатор svg id="fig6": ссылались на имя в коде вместо
номера на странице.
В каталоге у каждой начинки записан класс нарезки. Телом описаны шесть: брусок, кружок, ломтик, полукруг, сектор и четверть круга (いちょう切り) — у каждого своя формула сечения. Лист — это тот же брусок с очень малой толщиной.
Присыпка занимает место, но не бугрит рис — это две разные вещи,
и их легко свалить в одну. Пометка paint верна: дэмбу размазывают
(「塗るようにおいて」), а не кладут бруском. Но «размазан» не значит «не существует»:
у слоя 30 × 5 мм есть площадь, и в бюджет ядра он входит. Рис при этом не поднимается —
тонкий слой лист не бугрит.
Сектор (огурец 「縦6〜8等分」), полукруг (раскрытая креветка) и полумесяц
(долька авокадо 「縦6等分のくし切り」) — все три первые два пришли из японских
источников; форма «полумесяц» снята из кода 01.09, а авокадо стал бруском 10 × 10.
⚠ Один и тот же огурец с 05.09 показывается в двух формах: классический движок
держит сектор 14 × 9,9 мм (catalog.js:305), а фикстура F02
в режиме ?v2 — брусок 8 × 8
(core-v2/units.js:113). Раскладка игрока в
?v2 берёт живой каталог, то есть сектор, — расхождение
осталось только у фикстуры (задача #174).
И паста не особый случай рисования:
у неё теперь есть тело — полукруг, потому что выдавленный жгут лежит
НА рисе и выпуклого низа у него быть не может.
Это честная картина, а не упрёк: пока игра про твёрдые куски, особый случай дешевле общего закона. Но как только паста должна вытеснять рис, затекать в углубление и по-своему выглядеть на срезе — особый случай перестаёт работать.
Слева — кружок, каким его описывает модель сейчас: низ зеркалит верх. Справа — тот же верхний контур, но с плоским дном: купол, лежащий на рисе. Так выглядит половинка авокадо и ломтик рыбы кожей вниз.
Разница не косметическая: площадь сечения 0,785 → 0,893 — это нижняя долька, которую зеркало отрезало.
⚠ Обе доли — про кружок, целый
и со срезанным дном, а не про класс полукруг. У полукруга доля тела
ровно 0,785 — та же, что у кружка, потому что его профиль это полный купол
(top = √q, low = 0), а не кружок с плоским низом. Замер cutFill:
кружок и полукруг дают одинаково 0,7854, а 0,8927 — только связка кружок + плоское дно,
которую этот чертёж и рисует.
Форму выбирает класс нарезки (cut), и у каждого своя пара
функций верх/низ. Картинка слева — как модель описывает именно кружок,
справа — как она же описывает кружок с плоским дном. Оба существуют одновременно.
Сечение задано поперёк, а вдоль куска оно постоянно. Значит сверху кусок — прямоугольник, и в каком месте по v ни режь, фигура на срезе одна и та же. Скруглённые торцы, которые рисовались раньше, были враньём: домен тоже считает кусок прямоугольным, и срез у самого торца показал бы вещество там, где рисунок обещал пустоту.
Свёрнутая креветка, половинка авокадо, полукольцо огурца требуют профиля вдоль. Он обязан войти в тело и в раскладку одновременно — если нарисовать его только в рендере, появится четвёртое независимое описание куска, и вся работа обнулится.
Две оси листа. u — вдоль скрутки: этот размер станет длиной дуги на спирали. v — вдоль ролла: этот останется собой, вдоль него потом режут. Кусок узок по u и длинен по v — поэтому он и превращается в спираль полоской, а не пятном.
У каждой начинки в каталоге записаны wU — ширина вдоль u,
hU — толщина, dv — какую долю длины ролла кусок занимает.
Лосось 2,0 × 2,0 ед. = 10 × 10 мм — квадрат, по рецептам роллов
クラシル 「クリームチーズとサーモンは1cm角の棒状に切ります」; авокадо там же и таким же
бруском, 「アボカドは1cm幅に切ります」. Креветка 2,0 × 1,0, но dv = 0,30 —
коротышка, попадает не в каждый ломтик.
Калибр начинки следует за толщиной ролла, и источники это различают.
Тэкка-маки — хосомаки, и там 白ごはん.com даёт 「サクを7〜8mm角の棒状に切る」; в роллах
потолще калибр 1 см. Наш тунец так и стоит на 7,5 мм, лосось — на 10. Это то самое
правило «размер куска ↔ диаметр ролла» из docs/kitchen-practice.md.
Глаз сверху видит ровно верхний контур. В поперечной позиции
lu луч зрения упирается в поверхность на высоте cutTop(lu) —
той самой границе, что в Ф-1 была верхом фигуры. Поэтому вид сверху и вид в срезе
не выводятся друг из друга — они делят этот контур.
Нижнюю границу сверху увидеть нельзя. Она попадает только в срез. Это и есть ответ на вопрос «почему форма среза следует из формы верха»: не следует. Следует ровно половина, вторую половину пока даёт допущение о симметрии.
Свет считается, а не рисуется. Наклон поверхности в точке даёт нормаль, нормаль даёт долю света. Валик светел посередине не потому, что там нарисован блик, а потому что там поверхность смотрит вверх.
Модель вдавливает в рис каждый кусок отдельно. Повара так не делают. Разбор японских источников (docs/kitchen-practice.md) показал: приёма «вдавить кусок» в языке рецептов нет вовсе — везде глагол のせる, «положить сверху».
Что есть на самом деле — 土手 (дотэ, «дамба»): дальний край и бока рисовой постели раскладывают выше, центр не вспучивают. Получается неглубокая чаша, сделанная поднятием бортика, а не выкапыванием ямы. Она и держит начинку по центру при скрутке. Углубление, если его вообще делают, — одно и широкое, под весь набор, и сделано до укладки.
А в урамаки начинка вообще не касается риса: рис намазан на всю нори, лист переворачивают, и начинка ложится на голую нори. Вдавливать некуда.
Игрок не раскладывает куски поштучно. Он выбирает начинку и ведёт штрих по листу; куски ложатся вдоль него, а ориентацию задаёт направление штриха. Как именно разложить — решает игра. Решение владельца, 31.08.
Штрих один, а что вдоль него ложится — зависит от выбранного: брусок ляжет одним телом, ломтики лосося — внахлёст, присыпка — россыпью, паста — сплошной лентой. Значит кисть = ингредиент + нарезка, и нарезка выбирается один раз на инструмент, а не на каждый кусок.
Модель к этому почти готова. Прямой штрих — это ровно один кусок: центр в середине штриха, поворот по его углу, длина по его длине. Кусок в модели и есть призма постоянного сечения, вытянутая вдоль своей оси; «доля длины ролла = 1» у большинства начинок буквально означает полосу во всю длину. Модель уже описывает мазки — их просто кладут по одному.
Что исчезает: перетаскивание куска, удаление выносом за лист, кнопка поворота, выделение отдельного куска. Ориентация перестаёт быть выбором и становится следствием жеста — это ровно тот же ход, каким свет перестал рисоваться руками и стал считаться из наклона поверхности (Ф-7).
Скрутка — замена координат, а не новая геометрия. Точка листа
(u, v) едет на спираль: u превращается в длину дуги от сердцевины,
толщина листа — в радиальную глубину. v не участвует вовсе, он вдоль оси ролла.
Шаг витка = уплотнённый рис + обёртка. У хосомаки это
1,4 / 1,19 + 0,02 = 1,20 ед. (6,0 мм): рис в ролле тоньше, чем на постели,
потому что циновка выжимает воздух между зёрнами (#129). До 01.09 здесь стояло 1,42 —
шаг ненабитого слоя:
нори тоньше риса в семьдесят раз и на шаг почти не влияет — но именно она задаёт
тёмную линию, по которой на срезе видно витки.
схема не в масштабе · замер модели 03.09: 1,19 витка, ⌀ 28,9 мм (хосомаки в нори, пустой лист)
Эталон в play/checks.js даёт те же
28,9 мм и 1,19 витка; у всех баз обороты лежат в 1,05–1,24. Последним диаметры
УМЕНЬШИЛА постель: она перестала платить рисом за голую полосу у ближнего края, под
которую уходит подворот. Нормировка намазки делилась на весь лист, а грядка лежит не
от нуля — средняя толщина выходила на 5 % больше заявленной, и на столько же был лишний
рис. Диаметр идёт как корень из площади, поэтому упал на 3 % (#166).
Шаг витка — это рис плюс обёртка, поэтому толщина обёртки прямо меняет диаметр ролла. Разброс огромный: нори 0,10 мм против гюхи 1,50 мм — в пятнадцать раз. Замер на хосомаки (31.08, после правки подворота): ⌀ 29,1 мм с нори против 31,9 мм с гюхи, витков 1,146 против 1,142.
Обёртка почти не меняет число оборотов — 1,146 против 1,142. Расходится диаметр, потому что шаг витка это рис плюс обёртка.
Обёрток пять, и все японские: блин и бисквитный рулет сюда не входят. Сладкий ролл при этом есть, его держит 求肥 (гюхи), лист из моти-муки с сахаром и сиропом. Сахар не даёт ему черстветь — потому его в вагаси и раскатывают в лист, чтобы заворачивать.
Честность чисел разная — и ни одна из пяти не замерена. Четыре помечены inferred прямо в каталоге. Пятая, нори, стояла с источником «FAO» — но разбор 31.08 показал, что FAO даёт габарит и вес, а толщину не называет. 0,10 мм выводится из 21 × 19 см и 3 г при разумной плотности, и это честный вывод, а не источник. Догадка, одетая в источник, хуже честной догадки.
Кусок уже едет по витку и потому изогнут — это модель делает, видно на Ф-13. Но едет он как жёсткое тело: сохраняет форму, только повёрнутую по дуге. В жизни он ещё и сминается прижимом, и прямоугольник становится бочкообразным сектором. Сегодня этого нет ни в каком виде.
Числа для этого нашлись, и они опрокидывают интуицию. Есть серия, где авокадо, тунец, тамаго и креветка измерены одним протоколом (Cureus 2024, open access): авокадо оказалось жёстче сырой рыбы и в 5,6 раза жёстче тамаго. «Авокадо мнётся сильнее всех» — это про спелое; магазинное плотное ближе к овощу.
Спелость сильнее, чем разница между продуктами. Авокадо при дозревании идёт 2290 → 160 кПа, падение в 14 раз — больше, чем разница между огурцом и мясом. Значит начинка это не число, а отрезок. А огурец за 9 суток меняет не жёсткость, а характер: деформация разрушения растёт, и он из хрустящего становится гнущимся. Свежий огурец не мнётся — он колется.
Нож идёт поперёк оси ролла — значит поперёк куска. На срезе появляется ровно та фигура из Ф-1, только изогнутая по витку: её ширина легла вдоль дуги, толщина — вдоль радиуса. Чем ближе к сердцевине, тем сильнее изгиб.
Отсюда и главное правило игры: узор на срезе — следствие раскладки. Где положил по u — на каком витке окажется; где положил по v — попадёт ли вообще в этот ломтик.
Этот документ не описывает арт. Он описывает математику; арт из неё выводится. Правило одно и записано в решении «кусок — тело»: внешний вид не рисуется, а спрашивается у тела, а стиль задаётся одним числом — размером клетки. Крупная клетка без сглаживания даёт пиксель-арт, мелкая со сглаживанием — гладкий вид.
Но схему трудно читать, не видя результата. Поэтому здесь будет пара: слева чертёж, справа — как это выглядит на самом деле. Где кадр снят со стенда, это не догадка, а сама игра; где стенда ещё нет — помечено «предполагаем».
Кадры 2 и 3 сняты 31.08.2026, после правки подворота, площади ядра и профилей форм. Проверить их свежесть можно меркой: глубочайшее вхождение нори даёт на старых кадрах 0,676, на новых 0,927 при коридоре источника 0,75…1,0.
На кадрах — канонический футомаки: четыре роли, которых требует
источник (おぼろ · 卵焼き · 煮物 · 青味), проверенные canonCheck. Начинки на
срезе стоят у самой корки, а не в центре: это известное расхождение с практикой
(задача #98), и кадры показывают его честно, а не прячут.
Одна начинка на полулисте — канон хосомаки. Рёбра бруска прямые: фаска обнулена по справочнику, скругление углов у неё не задано.
Тот же лист, другая нарезка: огурец идёт сектором 「縦6〜8等分」, а не бруском. Форма на срезе — следствие того, как повар режет, а не свойство продукта.
Четыре роли, которых требует источник: おぼろ (розовая прослойка), 卵焼き (жёлтый брус), 煮物 (кампё и шиитакэ), 青味 (огурец). Раскладку подтверждает canonCheck.
Рис снаружи, нори внутри — порядок ПНр, вывернутый по-настоящему (#124). Ролл замыкается: 1,041 витка, то есть нахлёст 4 % сверх полного оборота.
Наруто — единственная настоящая спираль, подтверждённая источником: 「小口に渦巻き模様が見られるのが特徴」. Спираль здесь рисует текстура куска, а не намотка листа.
Обёртка толщиной 1,5 мм против 0,10 мм у нори — в пятнадцать раз. Шаг витка растёт, и ролл заметно толще при том же листе.
Заведено 31.08 по замечанию владельца: «примеров срезов в доке ядра достаточно?» Было два, и оба — одна раскладка в двух стилях, при четырнадцати схемах. Для документа «От нарезки до среза» этого мало: схема объясняет замысел, а срез показывает, что модель делает на самом деле.
Все шесть сняты одним прогоном 03.09 с одной модели, ровная рука
(press 1, v 1, air 0), срез посередине ролла. Числа рядом — замер той же
модели, а не подпись к картинке. Дата обязательна: кадры уже однажды прожили в
документе одиннадцать правок модели, и подпись под ними читалась как нынешняя норма.
tools/measure-slice.jsПравило одно и оно не менялось: внешний вид не рисуется, а спрашивается у тела. Ниже — что из этого следует и какими словами это звать, чтобы мы с владельцем называли вещи одинаково.
| Слово | Что это | Где живёт |
|---|---|---|
| Тело | Форма куска в сечении: пара функций «где верхняя граница» и «где нижняя» (cutTop / cutLow). Между ними — сплошное вещество, не оболочка: cutSpan даёт интервал по глубине. ⚠ Но это призма, а не 3D-тело: профиль растянут вдоль оси ролла и вдоль неё не меняется, а сам кусок абсолютно жёсткий — не сжимается ни при каком прижиме. Слово «тело» обещает больше, чем есть (#10, #118) | play/model/geometry.js, блок формы |
| Спрайт | Растровая картинка куска, посчитанная из тела по клеткам. Не рисуется художником — вычисляется | pieceTopSprite |
| Клетка (арт-пиксель) | Единственное число, задающее стиль: крупная без сглаживания — пиксель-арт, мелкая со сглаживанием — гладкий вид | PIX, ?pix=N, ?flat |
| Грань | Боковая или торцевая стенка куска, видимая сверху. Не обводка: это тоже вид тела, просто сбоку | pieceSideColor |
| Фоновый свет | Доля цвета, которая остаётся у поверхности, отвёрнутой от источника | AMBIENT |
| Контур | Векторная линия по настоящим координатам модели, поверх любой графики. По-английски это path + stroke; по-русски достаточно «контур» | strokeOutline, клавиша L |
Что рисуется поверх, а что нет — решение 31.08.2026.
L.
По умолчанию выключен. Это режим проверки глазом, а не арт.Что такое «луч», и почему это слово встречается всюду. Срез — круг. Чтобы что-нибудь про него узнать, его надо опросить, и самый естественный способ для круга — идти от центра наружу под каким-то углом, шагами, и на каждом шаге спрашивать модель: что здесь лежит? Такая прямая от центра и есть луч. Пройдя много лучей по кругу, получаем полную картину, не обходя каждый пиксель.
Одним и тем же приёмом меряется почти всё, что мы знаем о срезе:
| Что меряем | Лучей | Что берём с луча |
|---|---|---|
| диаметр и некруглость | 360 | радиус, на котором ролл кончился |
| глубина нори (не ушла ли внутрь) | 36 | самое глубокое её вхождение |
| контур границ | 240 | все радиусы, где сменился материал |
| слепок для регрессии | 24 × 12 колец | класс материала в узле сетки |
И здесь же — предел приёма, найденный 31.08. Луч даёт набор точек на одной прямой. Соседний луч даёт другой набор. Чтобы получилась линия, надо угадать, какая точка на втором луче продолжает какую на первом, — а на краю куска угадать нельзя: две границы там сходятся в одну и пропадают. Отсюда рваный контур, который владелец увидела сразу: «я не ожидала, что пути могут быть прерывистыми». Она права — контур куска не рвётся: скрутка его деформирует, но не разрывает. Рвёт его способ измерения, а не геометрия.
Правильный приём для замкнутых границ — не опрашивать лучами, а обходить саму границу по сетке (marching squares): петля получается замкнутой по построению, и рваться ей нечем. Сшивание лучей по близости радиуса, сделанное 31.08, убрало крупные разрывы (два полных круга сомкнулись), но мелкие обрывки на краях кусков остались — их лучами не победить. Заведено задачей.
HYPOTHESIS.md). Владелец 31.08 сказала, что
видит игру на Steam в стиле inbento, а не в пиксельном — вопрос открыт
(docs/design-core.md, п. 5). Менять стиль дёшево: это одно число, клетка,
и обе ветки уже живут в коде.
решение #105 «кусок — тело» · задача #104 «пиксель-арт» · #114| Функция | Отвечает на вопрос | Кто спрашивает |
|---|---|---|
| cutTop(d, lu) | Где верхняя граница сечения в поперечной позиции lu | вид сверху, срез, вытеснение риса |
| cutLow(d, lu) | Где нижняя. По умолчанию зеркало верхней | только срез |
| cutSpan(d, lu) | Что закрашивать в разрезе — обе границы вместе | срез |
| patchColor(m) | Какое вещество в точке: прожилка, кожица, семечко | оба вида — одна и та же |
| pieceLight(d, lu) | Сколько света, из наклона той же поверхности | вид сверху |
Правило, ради которого всё это собрано: новый вид куска не рисуется — выводится. Понадобился другой угол, другой стиль, другое разрешение — спрашивай тело. Появилось второе описание внешнего вида — значит, скоро разъедется, и это уже случалось дважды: сперва с формой, потом с фактурой.
| Корзина | Сколько | Что это значит |
|---|---|---|
| замерено | 11 · 9 % | внешний источник называет именно эту величину |
| выведено | 13 · 11 % | честно посчитано из замеренного |
| придумано, помечено | 21 · 17 % | догадка, и рядом об этом сказано |
| придумано, не помечено | ~65 · 54 % | догадка, о которой не сказано |
| помечено неверно | 11 · 9 % | заявлен источник, которого нет |
Внешняя опора модели расширилась 01.09, и не там, где искали. Долго она стояла на трёх источниках — SUZUMO (толщина и длина пласта), FAO (габарит листа), Мацуи 2001 (зерно), — и одна ошибка в SUZUMO шатала половину базы. Такая ошибка и нашлась.
Недостающие числа искали по кулинарным сайтам и фотографиям мастеров; там их нет. Нашлись они в паспортах суши-машин: у станка сечение ролла — конструктивный размер сменного узла, допуск назван прямо, а ракурса и масштаба, которыми болеет обмер по снимку, не существует вовсе. Три конкурирующих производителя дают один и тот же ряд до миллиметра, и это делает его отраслевым стандартом, а не мнением.
Опаснее всего не «придумано без пометки», а «обосновано устаревшим». Шесть из одиннадцати неверных пометок — это утверждение, которое проект сам опроверг и не вернулся поправить код. Например: масса риса футомаки стояла как 160 г, а 160 — это длина пласта в миллиметрах; ускорение поиска стояло как ×17, хотя замер дал ×3 и док это записал; обжим циновки обоснован «круглостью настоящего маки», которую собственный док называет неподтверждённой.
Все одиннадцать разобраны и восемь уже исправлены — docs/number-audit.md. Это не разовая уборка: разрыв «правим док → забываем код» породит их снова, и сторож в state-check ловит только отставание этого документа ядра.
Поэтому 31.08 появился третий сторож — сверка с практикой поваров
(play/test/practice.js, печатается в ?check).
Два первых следят за целостностью изнутри: цела ли модель, сходятся ли гит и доки.
Третий спрашивает то, чего ни один из них спросить не может: сходится ли модель
с тем, как делают на самом деле. На 01.09 — 29 утверждений с источниками: 19 меряются (16 сходятся, 3 расходятся
честно, со ссылкой на задачу), 10 остаются пробелами. На 05.09 — 36
утверждений: 32 сходятся, 4 не проверяются, честных расхождений не осталось ни
одного. Отдельно
7 пробелов знания: величина, которой не называет никто.
Тот же день убавил этот последний список впервые. Первой строкой в нём стояла некруглость — «не измерена никем, пороги стоят на пустом месте». Теперь у неё есть число. Правило, которое из этого следует: прежде чем записать величину в «искать негде», проверить, не нормирует ли её кто-то по работе — производитель оборудования, регламент, диетология, патент.
Ошибка бывает и обратной, и это главное в нём. Легко заметить, когда модель делает то, чего не бывает. Куда труднее заметить, что мы считаем что-то невозможным, а мастер именно это и делает — и в этом мастерство. Поэтому у каждой записи есть поле можетБыть: «источник говорит, что так бывает, а модель не умеет». Такие записи не валят проверку, но и не молчат.
| Величина | Модель | Источник | Сходится |
|---|---|---|---|
| нори по обхвату | 210 мм | 200–210 мм | ✓ |
| доля начинки в срезе | 24 % | 23–29 % (машина) | ✓ |
| √доли начинки | 0,525 R | 0,48–0,54 R | ✓ |
| где лежит начинка | диск 0,06…0,51 R | диск, медиана 0,48 R | ✓ #98 |
| нори между слоями риса | 0,014 | 0 | ✓ #130 |
| хосомаки ⌀ | 28,9 мм | 26–34 мм | ✓ |
| нахлёст нори | +58,5 мм | 3–60 мм | ✓ #132 |
| некруглость среза | 0,21 | 0,15–0,38 | ✓ #19 закрыт 01.09 |
| центрированность | 1,29 | 0,85–1,55 | ✓ #129 закрыт 01.09 |
Откуда взялись коридоры. 株式会社トップ печатает таблицу «сечение ↔ вес риса» по шести классам ролла. Плотность самого риса во всех строках одна, поэтому падение кажущейся плотности с ростом сечения — это ровно тот объём, который отдан начинке: 23–29 %. Веса независимо подтвердил диетологический бюллетень больницы 米子医療センター по всем трём общим классам. Длину нори на каждый класс даёт AUTEC отдельной колонкой.
Две дороги пришли в одну точку. Своя выкладка проекта шла от размеров листа нори и правила четверти и дала 20–29 %; промышленная идёт от весов на упаковочной машине и даёт 23–29 %. Модель стоит внутри обеих.
⚠ Но «доля начинки» и «радиус ядра» — это ОДНО число, а не два: они связаны тождеством a = √доли и выведены из одной таблицы. Модель, попадающая «в оба коридора разом», попадает в один. Здесь это было записано как двойное подтверждение — неверно, поймано скептиком 01.09.
Габарит сечения здесь намеренно не сравнивается. Промышленные 45 мм — это 「45mm角」, сторона квадрата, а модель отдаёт диаметр круга. Один рабочий периметр 180 мм даёт либо квадрат со стороной 45,0 мм, либо круг ⌀ 57,3 мм: это один и тот же ролл. Сначала сюда записали «модель толще на 17–30 %» — вывод был неверен ровно из-за этой подмены. Сравнивается то, что от формы не зависит — длина нори, — а форма меряется отдельно, некруглостью, и вот там расхождение настоящее.
Строка «нахлёст нори» была невозможностью и стала нормой. Обхват ролла превышал длину листа — 212,7 мм при 210, — то есть нори физически не хватало его обернуть. Чинилось это не подкруткой числа, а сменой укладки: рис лежит ОДНИМ КОЛЬЦОМ вокруг начинок, а нори обходит готовое кольцо снаружи. Тогда и «один оборот» источников встаёт на своё место — он про нори, а не про рис. Issue #132, влито 01.09.
Футомаки похудел — постель считается от ВЕСА. Стояла толщина 12 мм из паспорта рисового пласта SUZUMO, и наша постель несла 306 г риса. Рецепты называют 200 (白ごはん.com 「約200gくらいが目安」), что даёт 7,85 мм. Сегодня эталон футомаки — ⌀ 42,9 мм. ⚠ Промышленный 太巻 46 мм角 — это равновеликий круг ⌀ 52 мм, то есть на 9 мм БОЛЬШЕ нашего. Расхождение оставлено открытым нарочно: размеры мы берём у машин, а механику у поваров, и доводить диаметр до промышленного значило бы подгонять модель под цель, которую никто не выбирал. Развилка — issue #131.
Доля начинки 18,6 % — и это ручной футомаки, а не недоложенный. Тела канонических начинок дают 276 мм². Рецепт 白ごはん.com для базового футомаки — 279 мм² (厚焼き玉子 1㎝角 · 椎茸 4〜5㎜幅 ×3 · かんぴょう · 三つ葉). Совпадение почти точное.
Коридор 23–29 % выведен из весов упаковочной машины и описывает ролл, набитый плотнее. По решению владельца ориентир — повара, поэтому он остаётся справочным: говорит, каким бывает магазинный футомаки, а не каким должен быть наш. Ручного коридора пока нет — один рецепт это n = 1, и сужать по нему нельзя (#16, #131).
Всё это меряется командой, а не глазами: node tools/measure-slice.js. До 01.09 любое число модели можно было увидеть только открыв ?check и посмотрев — то есть расхождение находилось, лишь если кто-то смотрел. Так и находились предыдущие четыре: все четыре нашла владелец, ткнув пальцем в скриншот.