たべもののつくりかた.

目次/第04章

04Shape

断面を1枚描けば、立体になる

profile / section — 断面と外形

この章の3行まとめ
  • 団子も茶碗もクッキーも、横顔の折れ線を1本描いて、軸のまわりに回すだけで作れます。
  • 回すのではなく外形と縦断面を掛け合わせるやり方もあります。チョコレートがそれです。
  • 料理では「回せば作れる」ものが野菜より少ない。そこが野菜編との一番の違いです。

団子を作りたいとします。3Dの球を置いて潰す、ではありません。 まず紙に縦に切った断面の右半分を描きます。下から上へ、 中心からの距離(半径)が場所ごとにいくつになるかを並べた表です。 これを軸のまわりに1周ぶん回せば、立体ができます。これを回転体といいます。

// 4. Section : 茶碗の断面(ご飯.js)
//    t は下から上、r は中心からの距離。単位は cm
const PROFILE = [
    { t: 0.00, r: 1.75 },   // 高台の底
    { t: 0.10, r: 1.72 },
    { t: 0.16, r: 2.30 },   // 高台から胴へ立ち上がる
    { t: 0.45, r: 4.60 },
    { t: 0.80, r: 5.90 },
    { t: 1.00, r: 6.15 }    // 口縁
];
点は10個前後で足りる。あいだはなめらかな曲線で補う

点と点のあいだは直線でつなぐと角ばるので、Catmull-Rom スプラインという曲線で補います。 「4つの点を見て、真ん中の2点のあいだをなめらかに通る」曲線です。 これで、10個の数字から曲面ができます。

実験 — 断面を引っぱると、立体が変わる

白い点を左右にドラッグ。これが半径の表です。

その断面を1周ぶん回した結果。ドラッグで回せます。

凹凸を 0 にすると工業製品、上げすぎると手びねりの粘土になります。 料理ごとに「ちょうどよい」量が違うのが面白いところです。

回転体では作れないものがある

チョコレートのボンボンは、上から見ると丸や四角やハート、横から見るとドームです。 これは回転体ではありません。チョコレート.js は 外形(上から見た輪郭)と縦断面(横から見た形)を別々に定義して、掛け合わせています。

// 4. Shape : 外形(スーパー楕円)× 縦断面(赤道式)
// 上から見た輪郭。n を上げると四角に、下げると星形に近づく
const outline = (a) => 1 / Math.pow(
    Math.pow(Math.abs(Math.cos(a)), n) + Math.pow(Math.abs(Math.sin(a)), n),
    1 / n);
// 高さ v での「赤道からの縮み」。1 なら外形そのまま
const shrink = (v) => Math.sqrt(Math.max(0, 1 - v * v));
const radius = (a, v) => outline(a) * shrink(v);
チョコレート.js のやり方。輪郭と断面を掛けるだけで、丸も角丸四角もハートも作れる

さらに、まったく回らないものもあります。トーストは四角い板ですし、 鮭の切り身は包丁で切った断面と皮でできています。 これらは「上から見た輪郭を関数で書き、その中を格子で埋める」という作り方をします。 形の作り方は、料理の作られ方についてきます。

つまずきポイント

断面の両端は、きちんと 0 まで絞ってください。 団子の上下を半径 0.2 で止めると、そこが穴になって中が見えます。 回転体には自動でフタが付かないからです。

同じ高さに半径を2つ置けません。 「t → r」の表は、ひとつの高さにひとつの半径しか持てません。 茶碗の口縁のように外へ張り出してから下に折り返す形は、 (t, r) の2列ではなく (r, y) の2列で持つ必要があります。 ご飯.js の茶碗がそうなっています。

やってみよう
  1. 「団子」の真ん中の点を外へ引っぱって、たこ焼きに近づけてみる。
  2. 「茶碗」のいちばん上の点を内側へ入れて、壺にしてみる。
  3. 凹凸を 0.4 にしたとき、どの料理なら許せてどれが嘘に見えるか決める。
  4. チョコレート.js の n(スーパー楕円の指数)を探し、値を変えると外形がどう変わるか予想する。