fix(abut): 날개벽 헌치를 내측면 기준으로 재배치
- 뒷굽 헌치 삭제 - 연직 헌치 2개(흉벽 배면, 벽체 배면)를 날개벽 내측면 모서리에 평면 삼각형 기둥으로 둠 - 저판 상면 헌치 추가: 저판 상면과 날개벽 내측면 사이의 수평 헌치 (벽체 배면 → 뒷굽 구간, 다리 0.3 m) - 테스트 갱신 (헌치 6개, 저판 상면 헌치 범위). 전체 639건 통과, 타입 검사·빌드 통과. 브라우저 시각 확인은 미실시 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ea36df58cc
commit
e5134cdb68
4 files changed
+40
-38
No files matched your search
+17
-11
@@ -117,24 +117,30 @@ describe('교대 날개벽 하단 선 · 헌치 (AA3c, spec_abut §4.7)', () =>
|
||||
expect(line[2].el).toBeCloseTo(45.214, 2);
|
||||
});
|
||||
|
||||
it('the upper 300 × 300 haunch sits at the 흉벽 배면 (legs 0.3 m); the 뒷굽 haunch is a (t, EL) triangle with 0.3 m legs at the heel', () => {
|
||||
expect(a2Left.haunches.map((h) => h.kind)).toEqual(['upper']);
|
||||
const tri = a2Left.heelHaunch!;
|
||||
expect(tri).toHaveLength(3);
|
||||
expect(tri[0][0]).toBeCloseTo(-1.8, 6); // 뒷굽 끝 (t)
|
||||
expect(Math.hypot(tri[1][0] - tri[0][0], tri[1][1] - tri[0][1])).toBeCloseTo(0.3, 6);
|
||||
expect(tri[2][1]).toBeCloseTo(tri[0][1] - 0.3, 6); // leg down the 뒷굽 face
|
||||
const [c0, c1, c2] = a2Left.haunches[0].corners;
|
||||
expect(Math.hypot(c1.e - c0.e, c1.n - c0.n)).toBeCloseTo(0.3, 6);
|
||||
expect(Math.hypot(c2.e - c0.e, c2.n - c0.n)).toBeCloseTo(0.3, 6);
|
||||
it('two vertical 300 × 300 haunches at the 내측면 corners: upper at the 흉벽 배면, lower at the 벽체 배면', () => {
|
||||
expect(a2Left.haunches.map((h) => h.kind)).toEqual(['upper', 'lower']);
|
||||
for (const h of a2Left.haunches) {
|
||||
const [c0, c1, c2] = h.corners;
|
||||
expect(Math.hypot(c1.e - c0.e, c1.n - c0.n)).toBeCloseTo(0.3, 6);
|
||||
expect(Math.hypot(c2.e - c0.e, c2.n - c0.n)).toBeCloseTo(0.3, 6);
|
||||
}
|
||||
});
|
||||
|
||||
it('the 저판 상면 haunch runs from the 벽체 배면 to the 뒷굽 on the 저판 상면; the 뒷굽 haunch is gone', () => {
|
||||
const f = a2Left.footingHaunch!;
|
||||
expect(f.el).toBeCloseTo(41.995, 3);
|
||||
expect(f.dMTo).toBeGreaterThan(f.dMFrom);
|
||||
expect((a2Left as { heelHaunch?: unknown }).heelHaunch).toBeUndefined();
|
||||
});
|
||||
|
||||
it('upper haunch runs from the bracket top (흉벽 상단 − 0.85) to the wing top', () => {
|
||||
const [up] = a2Left.haunches;
|
||||
const [up, low] = a2Left.haunches;
|
||||
// The upper haunch rests on the highest point of the 브라켓 top over its footprint (the top falls along s), never below it.
|
||||
expect(up.zBottomEl).toBeGreaterThanOrEqual(46.838 - 0.85 - 1e-6);
|
||||
expect(up.zBottomEl).toBeLessThan(46.838 - 0.85 + 0.05);
|
||||
expect(up.zTopEl).toBeGreaterThan(up.zBottomEl);
|
||||
expect(low.zBottomEl).toBeCloseTo(41.995, 3);
|
||||
expect(low.zTopEl).toBeCloseTo(46.838 - 0.85, 2);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user