目次/第04章
断面を1枚描けば、立体になる
profile / section — 断面と外形
- 団子も茶碗もクッキーも、横顔の折れ線を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 } // 口縁 ];
点と点のあいだは直線でつなぐと角ばるので、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);
さらに、まったく回らないものもあります。トーストは四角い板ですし、 鮭の切り身は包丁で切った断面と皮でできています。 これらは「上から見た輪郭を関数で書き、その中を格子で埋める」という作り方をします。 形の作り方は、料理の作られ方についてきます。
断面の両端は、きちんと 0 まで絞ってください。 団子の上下を半径 0.2 で止めると、そこが穴になって中が見えます。 回転体には自動でフタが付かないからです。
同じ高さに半径を2つ置けません。 「t → r」の表は、ひとつの高さにひとつの半径しか持てません。 茶碗の口縁のように外へ張り出してから下に折り返す形は、 (t, r) の2列ではなく (r, y) の2列で持つ必要があります。 ご飯.js の茶碗がそうなっています。
- 「団子」の真ん中の点を外へ引っぱって、たこ焼きに近づけてみる。
- 「茶碗」のいちばん上の点を内側へ入れて、壺にしてみる。
- 凹凸を 0.4 にしたとき、どの料理なら許せてどれが嘘に見えるか決める。
- チョコレート.js の n(スーパー楕円の指数)を探し、値を変えると外形がどう変わるか予想する。