Files
Pier_v1/src/core/solplate.ts
T
ypshimandClaude Haiku 5.5 22fd1dc5f4 feat(view): solplate taper across the 교각축 직각 (thick T1 at the (−) side); 교량받침 본체 as a box
The solplate's L (A + margin) runs across the 교각축 직각 and its W (B + margin) along the 교축; the top tapers across L with
T1 at the (−) side (T1 = T + L·|S|/200). The 교량받침 본체 is one box per bearing: the solplate plan less 100 mm on each
side, from the mortar top (EL.X) up h3 = 181 mm, turned with the bearing row. It is shown with the bearing group.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:56:26 +09:00

57 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 솔플레이트 기하 (승인 2026-10-23). Pure: the solplate of one bearing, from its block (position, rowSkew) and the
* 공통 규칙 values. The plan is L = A + margin across the 교각축 직각 (n) and W = B + margin along the 교축 (s). The top
* tapers across L: the thick end T1 is at the (−) side of the 교각축 직각 direction (n = −L/2), the thin end T2 at (+) (n = +L/2).
* The underside is the bearing top (block top EL.X + h3). Lengths in m, as in the model.
*/
import { blockFramePoint, type BlockModel } from './geometry';
export interface SolplateParams {
/** 받침 평면 A (mm, across the 교각축 직각) and B (mm, along the 교축). */
A: number;
B: number;
/** 솔플 여유 (mm): L = A + margin, W = B + margin. */
margin: number;
/** 중심 두께 T (mm). */
T: number;
/** 기울기 S (%), negative as drawn: thickness changes by L·|S|/2 from the centre. */
slopePct: number;
}
export interface SolplateGeometry {
/** Length across the 교각축 직각 (m, = A + margin) and width along the 교축 (m, = B + margin). */
L: number;
W: number;
/** Thickness at the (−) side (T1) and the (+) side (T2) of the 교각축 직각 direction (m). */
T1: number;
T2: number;
/** Underside (EL m): the bearing top = block top (EL.X) + h3. */
bottom: number;
/** Eight corners: [s, y, n] in the model's local frame (EL m); order (a, c, bottom|top) with a along s and c along n. */
corners: [number, number, number][];
/** Volume (m³): L·W·(T1 + T2)/2. */
volume: number;
}
/** Solplate of the bearing at `block`, with the bearing height h3 (mm) and the 공통 규칙 parameters. */
export function solplateGeometry(block: BlockModel, h3: number, p: SolplateParams): SolplateGeometry {
const L = (p.A + p.margin) / 1000; // across the 교각축 직각 (n)
const W = (p.B + p.margin) / 1000; // along the 교축 (s)
// Thickness change from the centre to each side: L·|S|/2, with S in % (mm).
const drop = ((p.A + p.margin) * Math.abs(p.slopePct)) / 200 / 1000;
const T = p.T / 1000;
const T1 = T + drop;
const T2 = T - drop;
const bottom = block.padTop + h3 / 1000;
const thickAt = (c: number) => T1 + ((T2 - T1) * (c + L / 2)) / L;
const corners: [number, number, number][] = [];
for (const a of [-W / 2, W / 2]) {
for (const c of [-L / 2, L / 2]) {
const [s, n] = blockFramePoint(block, a, c);
corners.push([s, bottom, n]);
corners.push([s, bottom + thickAt(c), n]);
}
}
return { L, W, T1, T2, bottom, corners, volume: (L * W * (T1 + T2)) / 2 };
}