Интерактивный симулятор распространения звука под водой. Лучевая акустика, вертикальные профили скорости звука, отражения от дна и поверхности.
uRay — браузерная игра-симулятор. Вы запускаете звуковой луч под углом, он распространяется в слоистой среде по законам лучевой акустики, отражается от дна и поверхности. Цель — попасть в приёмник.
Два режима:
- Explore — свободное исследование, лучи видны всегда.
- Game — прицеливание, выстрел, попадание.
Звук синтезируется через WebAudio: импульсный отклик канала, с задержками по временам прихода лучей.
Нужен локальный HTTP-сервер (браузер не даёт грузить ES-модули через file://).
python -m http.server 8000
# или
npx serveОткрыть http://localhost:8000.
- Drag от источника — прицеливание.
- Колесо мыши — точная подстройка угла (±0.5°, с Shift — ±5°).
- ← → — то же с клавиатуры.
- Space — выстрел (в режиме Game).
- Сброс — вернуть угол к начальному.
- Вертикальный профиль скорости звука c(z), задаётся в уровне.
- Лучевая трассировка методом Рунге–Кутты 4-го порядка по длине дуги:
dx/ds = cos(θ)
dz/ds = -sin(θ)
dθ/ds = (dc/dz) · cos(θ) / c(z)
- Отражения от поверхности (z=0) и от дна (ломаная линия).
- Затухание: поглощение + цилиндрическое расхождение + потери при отражениях.
Текстовый файл, секции в квадратных скобках:
name, "Название уровня"
x_max, 5000
z_max, 1000
source_x, 0
source_z, 100
receiver_x, 4000
receiver_z, 800
receiver_radius, 40
[profile]
0, 1540
200, 1530
500, 1515
1000, 1502
[bottom]
0, 1000
2500, 950
5000, 1000
Уровни перечислены в levels/index.json