diff --git a/docs/INPUT_INFO_ANALYSIS.md b/docs/INPUT_INFO_ANALYSIS.md index 6037a57..f691e3a 100644 --- a/docs/INPUT_INFO_ANALYSIS.md +++ b/docs/INPUT_INFO_ANALYSIS.md @@ -35,18 +35,26 @@ #### Минимальные габариты: - **Официально:** 10×10×**2 мм** -- **В текущем коде:** 10×10×**10 мм** ❌ +- **Источник:** `Постановка_Задача_3_сжато_2.pdf`, стр. 2/17, раздел "Термины задачи", строка 81 +- **Цитата:** "его габариты больше минимально допустимых 10 × 10 × 2 мм" +- **В текущем коде:** 10×10×**10 мм** ❌ → **ИСПРАВЛЕНО** ✅ #### Максимальные габариты: -- **Официально:** 450×320×320 мм ✅ +- **Официально:** 450×320×320 мм +- **Источник:** `Постановка_Задача_3_сжато_2.pdf`, стр. 2/17, раздел "Термины задачи", строка 82 +- **Цитата:** "меньше максимально допустимых 450 × 320 × 320 мм" - **В текущем коде:** 450×320×320 мм ✅ #### Порог круглости: - **Официально:** K = r_in / r_out ≥ **0.7** -- **В текущем коде:** ≥ **0.8** ❌ +- **Источник:** `Постановка_Задача_3_сжато_2.pdf`, стр. 7/17, раздел "Категория «Не подходит для сортировки без доупаковки»", строка 245 +- **Цитата:** "коэффициент сравнения радиусов вписанной и описанной окружности, равный 0,7" +- **В текущем коде:** ≥ **0.8** ❌ → **ИСПРАВЛЕНО** ✅ #### Скорость конвейера: -- **Официально:** 1.0 м/с ✅ +- **Официально:** 1.0 м/с +- **Источник:** `Постановка_Задача_3_сжато_2.pdf`, стр. 4/17, раздел "Параметры участка и режим работы", строка 188 +- **Цитата:** "скорость движения конвейера — 1 м/с" - **В текущем коде:** 1.0 м/с ✅ ### 2.2. Правила классификации diff --git a/docs/THREE_D_FEASIBILITY.md b/docs/THREE_D_FEASIBILITY.md index 8d0a82d..b07f0d1 100644 --- a/docs/THREE_D_FEASIBILITY.md +++ b/docs/THREE_D_FEASIBILITY.md @@ -61,7 +61,7 @@ Props из `SimulationState`: item, machineState, scenario, classification, sens - [x] State machine двигает товар предсказуемо - [x] ROUTE_TO_* виден цветом и стрелкой - [x] 2D fallback работает -- [x] min dimensions 10×10×10, conveyor 1.00 m/s +- [x] min dimensions 10×10×2, max 450×320×320, roundness K ≥ 0.7, conveyor 1.00 m/s - [x] Нет horizontal scroll ## Decision log diff --git a/src/components/ThreeD/Item3D.tsx b/src/components/ThreeD/Item3D.tsx index 036680c..f91121a 100644 --- a/src/components/ThreeD/Item3D.tsx +++ b/src/components/ThreeD/Item3D.tsx @@ -1,5 +1,6 @@ import type { SimulatedItem, SimulationState } from '../../domain/types'; import { itemPosition3D, ROUTE_COLORS } from './itemMotion'; +import { DIMENSION_LIMITS } from '../../domain/classifier'; interface Props { simulation: SimulationState; @@ -21,7 +22,7 @@ export default function Item3D({ simulation, currentItem }: Props) { const isRound = currentItem.item.shape.includes('round') || currentItem.item.shape.includes('cylinder') || - currentItem.item.roundness >= 0.8; + currentItem.item.roundness >= DIMENSION_LIMITS.roundnessThreshold; const detecting = simulation.machineState === 'DETECTING'; const fault = simulation.machineState === 'FAULT' || simulation.machineState === 'EMERGENCY_STOP'; diff --git a/src/components/ThreeD/SceneLabels3D.tsx b/src/components/ThreeD/SceneLabels3D.tsx index 24b3230..9359368 100644 --- a/src/components/ThreeD/SceneLabels3D.tsx +++ b/src/components/ThreeD/SceneLabels3D.tsx @@ -1,6 +1,7 @@ import { Html } from '@react-three/drei'; import type { Category, MachineState, SimulatedItem } from '../../domain/types'; import { ROUTE_COLORS, TWIN_LAYOUT } from './itemMotion'; +import { DIMENSION_LIMITS } from '../../domain/classifier'; interface Props { machineState: MachineState; @@ -160,7 +161,7 @@ export default function SceneLabels3D({