|
|
@@ -371,6 +371,75 @@ if(finalMode === 'text' && currentLabText){
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+---
|
|
|
+
|
|
|
+## Запись 12. Добавление усиления в сцену полной сборки
|
|
|
+
|
|
|
+**Задача.** Сцена полной сборки не показывала путь от слабого ЭДС
|
|
|
+до готового сигнала. Требовалось добавить наглядную визуализацию
|
|
|
+работы усилителя.
|
|
|
+
|
|
|
+**Решение.** Сцена разнесена на два уровня: сверху акустика
|
|
|
+(динамик → волна → мембрана → катушка), снизу электрика
|
|
|
+(слабый ЭДС → усилитель → выходной сигнал). Между уровнями —
|
|
|
+стрелка ЭДС. Добавлен ползунок усиления, коэффициент отображается
|
|
|
+рядом с усилителем.
|
|
|
+
|
|
|
+```javascript
|
|
|
+const gainMul = 0.2 + gain * 1.5;
|
|
|
+
|
|
|
+// Слабый сигнал с катушки
|
|
|
+ctx.beginPath();
|
|
|
+for(let i=0;i<=g1W;i++){
|
|
|
+ const u = i / g1W;
|
|
|
+ const y = botCy - Math.cos((t*2.2 + u*3.6*Math.PI)) * (5 + vol * 8);
|
|
|
+ if(i===0) ctx.moveTo(g1X + i, y); else ctx.lineTo(g1X + i, y);
|
|
|
+}
|
|
|
+ctx.stroke();
|
|
|
+
|
|
|
+// Усиленный сигнал на выходе
|
|
|
+ctx.beginPath();
|
|
|
+for(let i=0;i<=g2W;i++){
|
|
|
+ const u = i / g2W;
|
|
|
+ const y = botCy - Math.cos((t*2.2 + u*3.6*Math.PI)) * (7 + vol * 14) * gainMul;
|
|
|
+ if(i===0) ctx.moveTo(g2X + i, y); else ctx.lineTo(g2X + i, y);
|
|
|
+}
|
|
|
+ctx.stroke();
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Запись 13. Улучшение видимости магнитного поля
|
|
|
+
|
|
|
+**Задача.** Силовые линии магнитного поля были плохо заметны.
|
|
|
+Движение катушки казалось слишком быстрым и не соответствовало
|
|
|
+остальным процессам в сцене.
|
|
|
+
|
|
|
+**Решение.** Количество силовых линий увеличено, добавлены бегущие
|
|
|
+стрелки направления поля. Расстояние между полюсами N и S увеличено
|
|
|
+в 2.4 раза для наглядного хода катушки. Убран искусственный
|
|
|
+множитель скорости катушки — теперь она движется синхронно
|
|
|
+с мембраной.
|
|
|
+
|
|
|
+```javascript
|
|
|
+// Было:
|
|
|
+const coilCx = coilX + bow * 0.6;
|
|
|
+
|
|
|
+// Стало:
|
|
|
+const maxMotion = (magX2 - magX1 - magW * 2) / 2 - 30;
|
|
|
+const coilMotion = Math.max(-maxMotion, Math.min(maxMotion, bow));
|
|
|
+const coilCx = coilX + coilMotion;
|
|
|
+```
|
|
|
+
|
|
|
+Сами магниты разнесены: было magX1=380, magX2=470 (расстояние 90 px),
|
|
|
+стало magX1=340, magX2=560 (расстояние 220 px). Внутренний зазор
|
|
|
+между полюсами — 164 px, этого хватает, чтобы катушка двигалась
|
|
|
+в пределах поля даже при максимальной громкости.
|
|
|
+
|
|
|
+Силовые линии поля теперь рисуются 8 штук с шагом 12 px между ними,
|
|
|
+по каждой линии бежит стрелка, показывающая направление от N к S.
|
|
|
+
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## Как запустить
|