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

導出定数と公差

導出定数は台帳の既定値ではない。属性の台帳が定めるのは「何を書いてよいか」であり、ここが定めるのは「何も書かれなかったとき何が導かれるか」である。書けば必ず書いた値が勝つ。

公差は「どれだけ違えば別のものか」を決める数である。座標は mm の整数が基本なので、長さの許容は整数の刻みの半分に置かれている。

どちらも DERIVATION_CONSTANTSTOLERANCES として公開されており、この頁の二つの表と実装の一致はテストが縛る。

導出定数 — 17 個

定数単位何を決めるか
WALL_T100mm壁厚の既定(t: で上書き)。芯線に対して両側へ半分ずつ
RAIL_T60mm遮蔽しない境界(air:1)の厚みの既定(t: で上書き)
RAIL_T_MAX80mm遮蔽しない境界の厚みの上限。t: に何を書いてもここで頭打ち
RAIL_H1100mm遮蔽しない境界の天端高の既定(境界の h: で上書き)
OPENING_HEAD2000mm開口のまぐさ高。扉はここまで立ち上がり、それ以外はここから下がる
OPENING_H1200mm扉以外の開口の高さの既定(開口の h: で上書き)
CEILING_T30mm天井面の見付け厚
ROOF_T200mm屋根版の厚さの既定と、最上階で天井高の上へ載せる量
CUT_HEIGHT1200mm平面の切断面の FL からの高さ(derive の入力の既定)
DEFAULT_RISER_MAX180mm蹴上げの上限(riser: で上書き)。段数を決める
TREAD_TARGET300mm折返しの踊り場を残余として決めるときの目標踏面(tread: で上書き)
LANDING_MIN1100mm中間踊り場の最小奥行。書かれた landing: もここまで引き上げる
ENTRY_LANDING1100mm乗り込みの床の奥行の既定(entry: で上書き)
LANE_ESCALATOR1200mmエスカレーター一台の呼び幅の既定(lane: で上書き)。台数を決める
TREAD_SOLID200mm段板の見付け厚(立体)
SLAB_T200mm踊り場の版と、斜路・エスカレーターの傾いた版の厚さ
STEP_MARK400mm平面のエスカレーターの段の刻みのピッチ

台帳に無い、その場で解ける寸法が三つある。昇降機のかごは四方から min(300, 辺 ÷ 6) だけ内へ寄せ、FL + 60 から FL + 2400 に立つ。エスカレーターの欄干は幅 min(140, 台の幅 ÷ 8)・厚さ 100mm で、段板面から 900mm 持ち上がる。どれも他の値との比で決まるので、単独の定数を持たない。

公差 — 7 個

同じ問いに二つの公差があってはならない。

公差単位何の許容か
EPS0.5mmの軸平行・向かい合わせ・区間の一致・共線マージの隙間・通り参照のはみ出し・開口の重なり
AREA_EPS1mm²切った残りが消えるか。左右の面積差が「偏りなし」か。屋根タイルが残るか
PROBE5mm描かれた線の左右を探る距離。形の解像度の下限である
SPAN_EPS1mm切断面と部品の z の比較・可視区間の長さの下限・双子の枠の一致・外皮の穴の長さの下限・壁の区間の下限
CROSS_EPS1e-6半平面で切るときの符号(外積 = 面積の二倍)の許容
PARALLEL_EPS1e-9無限直線と線分の平行判定・線分側パラメータの範囲
POINT_EPS1mm点が多角形の辺の上にあるとみなす幅(境界上は内側扱い)。柱の立地もこれで見る

EPS が 0.5mm なのは、整数 mm の刻みの半分だからである。AREA_EPS の 1mm² は 1mm × 1mm の破片で、半平面で切った残りがこれ以下なら形として数えない。

PROBE の 5mm は他の六つと性格が違う。これは丸めの許容ではなく、幅 5mm を下回る空間は左右のどちらにも判定できず、境界の線分が一本も出ないという、形そのものの下限である。

なぜ一箇所に集めてあるか

これらの値がモジュールごとに置かれていたあいだ、同じ 0.5 が二箇所に別々に書かれ、1 が四箇所に直値で並び、軸平行の判定だけが共通の値ではなく直値の 0.5 を使っていた。どれも同じ値なので事故は起きていない。起きていたのは、一つを動かしたときに何が動くのかを誰も言えないという状態である。

同じことが壁厚 100mm にも起きていた — 四箇所に別々のリテラルとして書かれ、そのうち一箇所を直しても他の三箇所は動かなかった。公差も定数も導出の規則の一部であり、規則が消費者ごとに違えば同じ原本から違う建物が出る。

隣り合う頁