feat(abut): 벽체·흉벽 평면을 skew로 변경

- 벽체 블록, 흉벽 배면 단차부, 흉벽 본체를 날개벽 선 방향(s = s_axis + (ws/wt)·t)으로 밀린 프리즘으로 만듦
- 벽체 전면·배면이 저판과 같은 skew 평행사변형을 이루고, 날개벽 바깥 선과 맞닿음
- 테스트: 같은 교좌면 단계 안에서 벽체와 흉벽이 공통 체적 없이 맞닿음 (인접 단계는 경계 상자만 겹치므로 제외). 전체 641건 통과, 타입 검사·빌드 통과. 브라우저 시각 확인은 미실시

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-03 17:43:29 +09:00
1 parent a756fd11ce
commit 08b1138c96
2 files changed
+23 -8

No files matched your search

+7 -3
View File
@@ -61,9 +61,13 @@ describe('교대 3D: 받침블럭과 접속슬래브 (spec §4.2, §4.8)', () =>
const box = new THREE.Box3().setFromObject(a).intersect(new THREE.Box3().setFromObject(b));
return Math.max(0, box.max.x - box.min.x) * Math.max(0, box.max.y - box.min.y) * Math.max(0, box.max.z - box.min.z);
};
for (const w of (named('wall') as THREE.Group).children) {
for (const p of (named('parapet') as THREE.Group).children) expect(volume(w, p)).toBeLessThan(1e-9);
}
// Same 교좌면 step only: the skewed prisms of neighbouring steps share a face, and their bounding boxes overlap slightly.
const walls = (named('wall') as THREE.Group).children;
const parapets = (named('parapet') as THREE.Group).children;
walls.forEach((w, k) => {
expect(volume(w, parapets[2 * k])).toBeLessThan(1e-9);
expect(volume(w, parapets[2 * k + 1])).toBeLessThan(1e-9);
});
// back face: the ledge (t −0.8 … −0.5) and the 흉벽 back (−0.5) meet at one horizontal edge, not a vertical offset
const backs = (named('wall') as THREE.Group).children.map((w) => new THREE.Box3().setFromObject(w).min.z);
expect(Math.min(...backs)).toBeCloseTo(members.shape.wallBackM, 6);