feat(536-1): E06 암반 평사투영 — Markland 판정 · Hoek-Bray 평면 · 쐐기 안전율 · 스테레오넷 · 절리 입력 · 화면

- 엔진(자체 · NumPy · SciPy): 평면 · 쐐기(교선) · 전도 Markland(측방 한계 20° 기본) · 평면 Hoek-Bray(인장균열 없음 · 임계 · 깊이 · 수압 · kh · 수동 볼트) · 쐐기 SWedge 꼴(미끄럼 방향 8 경우 · 두 면 · 한 면 · 수압 중력식 · kh · 볼트)
- 스테레오넷 좌표(등각 · 등면적 하반구 · 극점 · 대원 · 교선 · 마찰원 · 일광 엔벨로프 · 위험 영역 = 판정 부등식)
- 길: 절리 작업본 E06_StabRock/joints.json(초기값 · 저장 · 초기화) · 해석 = 암 측점 깎기 쪽만 · 파생 저장본 stab_rock · 결과 · 측점 스테레오넷
- 화면: 좌 절리군 표 · 설정 / 가운데 위험 띠 · 스테레오넷 / 우 측점 결과 · 안전율 표 · E 단계 막대에 E06(끝에 덧붙임)
- 시험 test_536_1(Hoek Sau Mau Ping 0.8184 · 1.0655 · Sharma 윗면 무게 · Hoek-Bray 쐐기 계수 · Kumsar · Priest 두 예제 · Markland 경계 · 투영 왕복 · 위험 영역 = 판정) · test_528 E 단계 수 4 → 5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 21:26:37 +09:00
co-authored by Claude Opus 5.5
parent 6029108bdb
commit f2e8bd6d5f
21 changed files with 3420 additions and 7 deletions
+2
View File
@@ -35,6 +35,7 @@ import { ui_locales_m2 } from "./ui_template_locale_m2";
import { ui_locales_de } from "./ui_template_locale_de";
import { ui_locales_e } from "./ui_template_locale_e";
import { ui_locales_e05 } from "./ui_template_locale_e05";
import { ui_locales_e06 } from "./ui_template_locale_e06";
/** 지원 언어 인덱스: 0 = 한국어, 1 = 영어 */
export const LANGUAGES = ["ko", "en"] as const;
@@ -77,6 +78,7 @@ export const ui_locales = {
...ui_locales_de,
...ui_locales_e,
...ui_locales_e05,
...ui_locales_e06,
} as const;
export type LocaleKey = keyof typeof ui_locales;
+1
View File
@@ -17,6 +17,7 @@ export const ui_locales_de = {
DE_Step_StabSection: ["2D 해석", "2D Analysis"],
DE_Step_Stab3D: ["3D 해석", "3D Analysis"],
DE_Step_StabReport: ["보고서", "Report"],
DE_Step_StabRock: ["암반 해석", "Rock Analysis"],
DE_Step_Empty: ["준비 중인 단계입니다.", "This step is not ready yet."],
/* --- D04 확정 · 업체 · 내보내기 · B03 예정노선 가져오기(531-3) --- */
+122
View File
@@ -0,0 +1,122 @@
/* =============================================================================
* ui_template_locale_e06.ts
* 다국어 사전 — E06 암반 평사투영 해석(요구 345 · 351 · PLAN 536-1)
*
* 신규 문구는 해당 섹션 최하단에 추가.
* ========================================================================== */
import type { LocaleEntry } from "./ui_template_locale_common";
export const ui_locales_e06 = {
/* --- E06 좌측 --- */
E06_Note: [
"암 측점(리핑암 · 발파암) 깎기 비탈만 봅니다. 절리군을 넣고 [저장] → [해석]. 사면 방향 · 경사 · 높이는 복사본 횡단, 물성 · 지진 · 기준안전율은 지반 조건(E02)을 씁니다.",
"Only cut slopes at rock stations (rippable · blasting rock). Enter joint sets, [Save] → [Analyze]. Slope orientation, angle and height come from the copied sections; strength, seismic and required FS from Ground (E02).",
],
E06_Card_Joints: ["절리군", "Joint sets"],
E06_JointsHint: [
"현장 조사값 — 경사방향 · 경사(°) · 절리면 φj(°) · cj(kPa) · 지속성(m · 비우면 무한). 구간(m) 안 측점에만 씁니다.",
"Field data — dip direction · dip (°) · joint φj (°) · cj (kPa) · persistence (m, blank = unlimited). Applies to stations within the range (m).",
],
E06_Col_Name: ["이름", "Name"],
E06_Col_From: ["시작", "From"],
E06_Col_To: ["끝", "To"],
E06_Col_DipDir: ["경사방향", "Dip dir."],
E06_Col_Dip: ["경사", "Dip"],
E06_Col_Phi: ["φj", "φj"],
E06_Col_C: ["cj", "cj"],
E06_Col_Persist: ["지속성", "Persist."],
E06_Add: ["+ 절리군", "+ Joint set"],
E06_Remove: ["지움", "Remove"],
E06_NoSets: [
"절리군이 없습니다 — [+ 절리군] 으로 넣으세요.",
"No joint sets — add one with [+ Joint set].",
],
E06_Card_Settings: ["해석 설정", "Analysis settings"],
E06_Set_LateralPlanar: ["평면 측방 한계 (°)", "Planar lateral limit (°)"],
E06_Set_LateralTopple: ["전도 측방 한계 (°)", "Toppling lateral limit (°)"],
E06_Set_Gamma: ["암 단위중량 (kN/m³ · 비우면 E02)", "Rock unit weight (kN/m³, blank = E02)"],
E06_Set_WaterWet: ["우기 수위 비 (0~1)", "Wet water ratio (0–1)"],
E06_Set_Crack: ["인장균열", "Tension crack"],
E06_Crack_None: ["없음", "None"],
E06_Crack_Critical: ["임계(최소 안전율 자리)", "Critical (minimum FS)"],
E06_Crack_Depth: ["깊이 지정", "Given depth"],
E06_Set_CrackZ: ["균열 깊이 (m)", "Crack depth (m)"],
E06_Set_BoltForce: ["볼트 힘 (평면 kN/m · 쐐기 kN)", "Bolt force (plane kN/m · wedge kN)"],
E06_Set_BoltPlunge: ["볼트 경사 (수평 아래 °)", "Bolt plunge (below horizontal °)"],
E06_SettingsHint: [
"측방 한계 기본 20° (Dips 기본 · 지식DB 03 전도는 30°) · 우기 = 비탈 높이 ½ 수위(KDS 11 70 05) · 볼트 = 수동 지지력.",
"Lateral limit default 20° (Dips default; knowledge DB uses 30° for toppling) · wet = water at half height (KDS 11 70 05) · bolts = passive support.",
],
E06_Analyze: ["해석", "Analyze"],
E06_Running: ["해석 중…", "Analyzing…"],
E06_Done: ["암반 해석을 마쳤습니다.", "Rock analysis done."],
E06_Fresh: ["입력이 같아 지난 결과를 씁니다.", "Inputs unchanged — previous result kept."],
E06_Saved: ["저장했습니다.", "Saved."],
E06_Unsaved: ["저장 안 된 변경이 있습니다.", "There are unsaved changes."],
E06_ReadOnly: ["보기만 허용된 프로젝트입니다.", "This project is view-only."],
E06_Invalid: ["틀린 칸", "Invalid fields"],
E06_Err_Range: ["범위 밖", "Out of range"],
E06_ResetConfirm: [
"절리군 · 설정을 초기값(절리 없음)으로 되돌릴까요?",
"Reset joint sets and settings to the initial state (no joints)?",
],
E06_ResetDone: ["초기값으로 되돌렸습니다.", "Reset to initial values."],
E06_NoProject: ["열린 프로젝트가 없습니다.", "No project is open."],
/* --- E06 가운데 · 우측 --- */
E06_Stale: [
"절리 · 지반 조건이 해석 뒤 바뀌었습니다 — [해석] 을 다시 누르세요.",
"Joints or ground changed since the analysis — press [Analyze] again.",
],
E06_Band: ["위험 띠", "Risk band"],
E06_View_All: ["전체", "All"],
E06_Mode_planar: ["평면", "Planar"],
E06_Mode_wedge: ["쐐기", "Wedge"],
E06_Mode_toppling: ["전도", "Toppling"],
E06_Proj_Angle: ["등각", "Equal angle"],
E06_Proj_Area: ["등면적", "Equal area"],
E06_PickStation: ["측점을 고르세요.", "Pick a station."],
E06_Lg_Slope: ["사면 대원 · 극점", "Slope plane · pole"],
E06_Lg_Friction: ["마찰원 φ", "Friction circle φ"],
E06_Lg_Planar: ["평면 위험(극점)", "Planar zone (poles)"],
E06_Lg_Daylight: ["일광 엔벨로프", "Daylight envelope"],
E06_Lg_Wedge: ["쐐기 위험(교선)", "Wedge zone (intersections)"],
E06_Lg_Line: ["교선", "Intersection"],
E06_Lg_Toppling: ["전도 위험(극점)", "Toppling zone (poles)"],
E06_Lg_Pole: ["절리 극점", "Joint pole"],
E06_Result_Title: ["측점 결과", "Station results"],
E06_NoResult: ["해석 결과가 없습니다 — [해석] 을 누르세요.", "No results — press [Analyze]."],
E06_NoRock: ["암 측점 깎기 비탈이 없습니다.", "No rock cut slopes."],
E06_L_Station: ["측점", "Station"],
E06_L_Side: ["쪽", "Side"],
E06_L_Modes: ["평 · 쐐 · 전", "P · W · T"],
E06_L_MinF: ["최소 Fs", "Min Fs"],
E06_L_Verdict: ["판정", "Verdict"],
E06_Left: ["좌", "L"],
E06_Right: ["우", "R"],
E06_V_NG: ["N.G", "N.G"],
E06_V_check: ["검토", "Check"],
E06_V_OK: ["O.K", "O.K"],
E06_V_none: ["위험 없음", "No risk"],
E06_SlopeLine: [
"사면 {dd}° / {dip}° · 높이 {h} m · 윗면 {up}° · 암 γ {g} kN/m³",
"Slope {dd}° / {dip}° · height {h} m · upper {up}° · rock γ {g} kN/m³",
],
E06_NoRisk: ["위험 모드 없음(Markland).", "No kinematic failure mode (Markland)."],
E06_NoJointsHere: ["이 측점 구간에 절리군이 없습니다.", "No joint sets cover this station."],
E06_C_Mode: ["모드", "Mode"],
E06_C_Joints: ["절리", "Joints"],
E06_C_Cond: ["조건", "Case"],
E06_C_F: ["Fs", "Fs"],
E06_C_Req: ["기준", "Req."],
E06_Cond_dry: ["건기", "Dry"],
E06_Cond_wet: ["우기", "Wet"],
E06_Cond_seismic: ["지진", "Seismic"],
E06_NotFormed: ["(블록 안 생김)", "(no block)"],
E06_Persist: ["(지속성 < 활동면)", "(persistence < plane)"],
E06_ToppleNote: [
"전도 = 기하 판정만(블록 전도 안전율은 Goodman-Bray 정밀 검토 몫).",
"Toppling = kinematic only (block toppling FS needs a Goodman–Bray check).",
],
} as const satisfies Record<string, LocaleEntry>;