メインコンテンツまでスキップ

導出される情報

.muro に形は無い。平面図も面積も内外の別も動線も、原本には書かれず、すべて導出される。

これは節約ではなく役割の定義である。幾何は、これから現実側から取れる。スキャン、SLAM、写真測量、splat — 形を得る手段は安くなり続ける。取れるようになるものを、わざわざ原本に書いて持つ理由はない。

点群からは決して出てこないものがある。ここが何の空間か。この境界は誰と誰の境か。この扉は通ってよいのか。いつからそうなのか。意味と関係と同一性は、観測では得られない。書くしかない。

したがってこの記述は、書くしかないものを持つ。形を原本に持たないことは妥協ではなく、役割の定義である。そして書くしかないものだけを持てば軽い。軽ければ一棟が丸ごと機械の視野に入る — 軽さは目的ではなく、役割から出る結果である。

一枚の表

左右は対応する組ではなく、それぞれ独立した一覧である。

書かれるもの (原本)導出されるもの
空間の領域 (通り参照の矩形合併)壁芯の線分
境界の関係 (両端・種別・属性)既定境界 (水平の壁・垂直の床)
開口 (door / window)面積 (壁芯) と屋内床面積
gridlevel垂直の隣接
敷地形状 (polygon)半屋外・庇下
アセット・ゾーン通行可能性
数えない分節 (area / seg)・uid平面図・採光の入力・接道と建蔽率・正準 JSON

この表が、初学者の二つの疑問に同時に答える。

「床はどこに書くのか」 — 書かない。上下のレベルで平面が重なる空間どうしは垂直に隣接し、既定の解釈は「床がある」である。例外 (階段・シャフト・吹抜け) だけを境界で宣言する。

「この空間を半屋外だと宣言したい」 — できない。半屋外は導出である。外部に対して open または air:1 の境界を持つ、領域つきの空間が半屋外になる (既定の境界)。

座標を持つのは与件だけである

原本の中で層が三つに割れている。

何か座標実体
与件通り芯・レベル・敷地形状持つ。唯一の絶対の出所持たない
関係二つの空間の間に何があるか与件から一意に決まるここに宿る
空間名前・用途・意味を担う持たない。与件を参照して相対的に位置づく持たない

与件が座標を与え、関係が実体を持ち、空間は名を持つ。

通り芯・レベル・敷地形状は測量と決めごとに由来する所与であり、設計の生成物ではない。だから座標を持ってよい。逆に言えば、書かれるのは与件であり、書かれないのは設計の生成物である。これで「形は書かない」と「敷地形状は書く」が矛盾しなくなる。

grid X 0 8400 16800 25200          # 与件 — 測量と構造計画が決める
level L1 0 h:4200 slab:1400        # 与件
polygon /site -2600,-7000 38000,-7000 38000,15600 2000,16800   # 与件 — 唯一、書かれる形
space /L1/lobby hall X1..X3 Y1..Y2 # 与件を参照する。座標は持たない

空間の位置は常に通り参照 (X2+450 の形) で書かれる。生の座標を空間に書く道は無い。

位置を持たないものは、内包だけを持つ

関係に宿らない物 — 空間に置かれる機器のような — は、型への参照と、どの空間に含まれるかだけで持つ。内包からは形が作れない。

内包は意味であって場所ではない。逆に内包から場所を導こうとすれば配置の仕組みが要る。そうなればこの記述は配置の道具になってしまう。内包が座を与えないと定めることが、その入口を閉じている。

柱はその中間にある。柱の位置はどこにも書かれず、通り芯の交点と床の交わりから現れる — 与件と与件の交わりだから、座を持つ。壁が境界から現れるのと同型の規則である (column)。

導出と生成は違う

導出のもう一段外側に生成がある。

  • 導出 — 書かれた構成から一意に決まるもの。面積・線分・柱・段数・床と屋根。同じ原本からは常に同じものが出る
  • 生成 — 導出された形をどう見せるか。線幅・色・記号・注記・縮尺

「同じ構成から複数の形が出る」ことは欠陥である。複数あってよいのは見た目であって、形ではない。この線引きは機械が縛っている — 導出の決定性

段数を例に取る。原本に段数も踏面も勾配も書かれていない。領域と階高と「上る向き」の宣言だけから導かれる。

npx tsx src/cli.ts runs examples/complex/main.muro
B2→B1	ramp	車路	rise 4200mm	return	slope 1/9.2	going 38800mm	/B2/ramp
B2→B1	stair	階段1	rise 4200mm	return	24 risers of 175mm, tread 300mm	going 6600mm	/B2/st1
L1→L2	escalator	エスカレーター	rise 6600mm	straight	slope 1/1.5	going 9800mm	/L1/es
L1→L2	stair	階段1	rise 6600mm	return	37 risers of 178mm, tread 300mm	going 10800mm	/L1/st1

同じ大きさの階段室に、階高に応じて 37 段・24 段が入る。階高を変えれば段数が変わる。原本の側で数え直す作業は無い。

機械形式も導出を持たない

正準 JSON が持つのは合成の結果であって、導出の結果ではない。導出された既定境界は書かれた構成ではないので、正準 JSON には出ない。

だから check の「境界 1」と koyu json"boundaries": [] は食い違って見える。前者は導出後の意味を、後者は書かれた原本を数えている。規則が仕様として明文であり、参照実装が API として提供される以上、消費者が意味を再実装する必要はない (正準 JSON)。

この先