Крыло и полёт

Модель полёта — не аркада с одной кривой «скорость–подъёмная сила», а точечная масса с ориентацией, которая считает те же уравнения, что и настоящий дельтаплан: подъёмная сила и сопротивление из поляры крыла, масса пилота, крен от смещения веса, сваливание, разбег и выравнивание у земли. Ниже — как это устроено и какие крылья в игре.

Как считается полёт

Логика лежит в scripts/flight/ — обычных классах RefCounted (проверяются без графики, тестами), нода Glider — тонкая обёртка вокруг них. Шаг физики — 120 Гц, полу-неявный Эйлер.

Состояние планера: положение, скорость относительно земли, курс, крен и угловая скорость крена, тангаж киля, угол атаки, флаг срыва. Силы: подъёмная — перпендикулярно воздушной скорости, наклонена на угол крена; сопротивление — вдоль потока; вес.

q=12ρV2S,L=q CL(α),D=q CD(CL) q = \tfrac12\rho V^2 S,\qquad L = q\,C_L(\alpha),\qquad D = q\,C_D(C_L)

Поляра. У каждого крыла — таблица точек «скорость (км/ч) → снижение (м/с)» при эталонной массе пилота (configs/wings/<id>.json → polar.points_kmh_ms). Точки переводятся в безразмерные CL→CDC_L\to C_D по

CL=2Mgcos⁡γρSV2,CD=CL tg γ C_L = \frac{2Mg\cos\gamma}{\rho S V^2},\qquad C_D = C_L\,\mathrm{tg}\,\gamma

и между ними — линейная интерполяция; в спокойном воздухе модель сходится к исходной поляре точно. За самым медленным краем поляры (глубже, чем есть точки) — парабола CD0+kCL2C_{D0}+kC_L^2.

Трапеция задаёт угол атаки, а не скорость напрямую: положение 0 — трим, −1 — «полностью на себя» (разгон), +1 — «полностью от себя» (до сваливания); между ними скорость линейна по отклонению. Раскладка — как у дельтапланериста: от себя (мышь от себя, ↑, стик геймпада вперёд) — нос вверх, торможение; на себя (мышь на себя, ↓) — нос вниз, разгон. Мышь всегда ведёт крыло (трапецию) — когда она захвачена (клавиша M); без захвата курсор свободен, а трапеция держит последнее положение. W/S/A/D крыло не двигают никогда: в полёте они поворачивают голову в кабине (90°/с; отпустил — взгляд остаётся; V или средняя кнопка — снова вперёд), на земле — шаг и поворот на месте. Осмотреться мышью — с зажатой правой кнопкой (трапеция при этом держит положение). Настройка «Инверсия тангажа» (по умолчанию выключена) даёт раскладку «как в самолёте» для стрелок, мыши и стика. Крыло выходит на заданный угол атаки не мгновенно, а с постоянной времени pitch_time_constant_s — инерция. Раскачку скорость↔высота (фугоиду), которая у точечной модели без демпфирования качалась бы бесконечно, гасит добавка к углу атаки, пропорциональная dV/dtdV/dt (flight.json → phugoid_damping, коэффициент 1,4 — затухание ζ≈0,5): реальное крыло устойчиво по скорости и успокаивается за 1–2 колебания.

Масса и высота. Раз трапеция задаёт CLC_L, все скорости и снижение растут как M/ρ\sqrt{M/\rho}, а качество (CL/CDC_L/C_D) от массы не зависит — это стандартный результат теории планирующего полёта (так же пересчитывают поляру планера при заливке водобалласта). Масштабируется полная масса (пилот + крыло), не масса пилота отдельно. Плотность воздуха ρ(h)=1,225⋅e−h/10400\rho(h) = 1{,}225\cdot e^{-h/10400} кг/м³ (приближение МСА): на 2000 м скорости уже на ~10 % больше, чем у земли. Подробный разбор с проверкой по паспортным данным двух размеров одного крыла (Litespeed RS 3.5 и RS 4) — docs/research/pilot_mass.md.

Постоянные времени по крену и тангажу растут как M/Mэт\sqrt{M/M_{\text{эт}}} (момент инерции ∝ M, аэродинамическое демпфирование ∝ V ∝ √M) — тяжёлый пилот входит в крен и выходит из него медленнее.

Крен и трапеция

Два режима управления креном (controls.json → roll_control_mode, настройка «Управление креном»); в обоих смысл ControlInput.roll в полёте — это ControlInput.weight_shift.

  • «Смещение веса» (weight_shift, по умолчанию). Крен (мышь вбок, ←/→, стик) — положение пилота поперёк трапеции (−1…+1, 0 — центр). Техника как в жизни: качнулся вправо — крыло кренится и поворачивает; встал в центр — крыло само выравнивается и летит прямо в новом направлении. Угловая скорость крена, к которой крыло выходит с постоянной времени roll_time_constant_s:

    φ˙=u⋅k(V)⋅roll_rate_max_dps−(roll_stability_per_s+roll_stability_steep_per_s⋅(φ/45°)2)⋅φ \dot\varphi = u\cdot k(V)\cdot\text{roll\_rate\_max\_dps} - \big(\text{roll\_stability\_per\_s} + \text{roll\_stability\_steep\_per\_s}\cdot(\varphi/45°)^2\big)\cdot\varphi

    (плюс вклад от разницы потоков на концах крыла — см. ниже). k(V)k(V) — эффективность смещения веса: ниже трима (V/Vтрим)roll_speed_exponent(V/V_{\text{трим}})^{\text{roll\_speed\_exponent}} (крыло вялое), выше трима — (Vтрим/V)roll_heavy_exponent(V_{\text{трим}}/V)^{\text{roll\_heavy\_exponent}} (на скорости тяжелее). При удержании смещения устанавливается крен, пропорциональный смещению, без раскрутки в спираль: на полном смещении в вираже ≈ 41° у учебного крыла, 45° у мачтового (Laminar), 44° у спортивного. Из центра после 2 с полного смещения крыло возвращается к |φ| < 3° за ≈ 2,0 / 2,6 / 3,3 с соответственно — учебное устойчиво сильно, спортивное на малом крене почти нейтрально. Круче roll_overbank_deg (70 / 65 / 60°) устойчивость за 10° сходит на нет — начинается спираль, выход только смещением в обратную сторону. Переложение 45°→45° на полном смещении ≈ 2,2 с.

  • «Как раньше» (rate). Смещение веса напрямую задаёт угловую скорость крена (roll_rate_max_dps, множитель (V/Vтрим)0,5(V/V_{\text{трим}})^{0{,}5}), выход на неё — с постоянной времени roll_time_constant_s; без ввода крен держится. Переложение 45°→45° ≈ 2,3–2,7 с. Автопилот и боты тестов всегда в этом режиме.

Клавиша X («в центр») в обоих режимах плавно ставит трапецию в нейтраль и выравнивает крыло в горизонт. Вираж — координированный, без скольжения: курс идёт точно по воздушной скорости, радиус V2/(g tgφ)V^2/(g\,\mathrm{tg}\varphi), в вираже скорость растёт как n\sqrt n, снижение — как n1,5n^{1{,}5} (n — перегрузка).

Сваливание

Выше критического угла атаки обтекание за lift_loss_time_s переходит к сорванному (динамический срыв): парус работает как пластина поперёк потока,

CL=CNsin⁡αcos⁡α,CD=CNsin⁡2α C_L = C_N\sin\alpha\cos\alpha,\qquad C_D = C_N\sin^2\alpha

(CN=2C_N=2, как у купола парашюта). Через nose_drop_delay_s нос сам опускается на nose_drop_deg, крыло разгоняется и выходит из срыва; если продолжать держать трапецию от себя, срывы повторяются. В крене больше wing_drop_bank_deg — сваливание на крыло: опущенная консоль продолжает падать, управление креном ослаблено.

Разбег, отрыв, посадка

Земля. Фазы: стоит → идёт (поворот на месте, скорость шага падает на крутом склоне) → бежит (сила ног падает к пределу скорости бега, склон помогает, крыло по мере разгона разгружает пилота). Боковой ветер кренит крыло в руках, пилот выравнивает его ручкой крена. Отрыв — когда вертикальная составляющая подъёмной силы ≥ веса. Срывы взлёта: нос высоко/низко, попутный ветер сильнее 1,5 м/с, боковой снос с креном крыла > 20°, слишком слабый или долгий (> 10 с) разбег.

Выравнивание. Ниже 4 м над ногами трапеция «от себя» сильнее порога ставит киль на тангаж до 50° к горизонту за 0,1 с; нос при этом срыве не опускается. Парус на закритическом угле кратковременно тормозит сильнее статики (нормальная сила ×3, кратковременный рост CLC_L ×1,5 — вихрь динамического срыва), крыло подскакивает и «подвешивается»: опускает пилота на ноги не быстрее 0,7 м/с, пока не опустится на 1,6 м — дальше эффект кончается, и крыло падает. Это феноменологическая модель (вихрь динамического срыва, экран земли, пилот встаёт под крыло — без физического моделирования маятника пилота). При правильном выравнивании (~1,2·V_св) касание ≈ 1,2 м/с вертикально; на 1 м выше точки — ещё мягко (~1,3 м/с); на 3 м выше — «плюх» ~6,4 м/с, уже жёсткая посадка. Навстречу ветру выравнивают позже (~0,9·V_св).

Посадка. Скорость касания раскладывается по нормали к склону («вертикальная») и вдоль него («горизонтальная»). Пороги подобраны по ответам пилотов-консультантов («с 5 м/с посадка уже жёсткая, при правильной посадке скорость ≈ 0»): мягкая — вертикальная < 5 м/с, горизонтальная ≤ 3 м/с, крен ≤ 15°; жёсткая — вертикальная 5…7 м/с или горизонтальная 3…12 м/с (на триме без выравнивания — около 10 м/с); авария — вертикальная > 7 м/с (вдвое больше энергии удара, чем на пороге жёсткой), горизонтальная > 12 м/с или крен > 35°.

Трапеция «Апогея»: узел стоек и подвеска

Границы модели

  • Нет скольжения и рыскания как отдельной степени свободы, нет момента от вращения по курсу — крыло всегда летит «носом в поток».
  • Тангаж кинематический (первого порядка): нет момента трапеции и центровки, только выход на заданный угол атаки с постоянной времени.
  • Нет экранного эффекта у земли; на земле пилот и крыло — одна точка. Выравнивание — феноменологическая модель, без физического маятника пилота.
  • Поляры синтезированы по паспортным ориентирам производителей (полных измеренных поляр они не публикуют) и по методике, проверенной на паре реальных размеров одного крыла.
  • Предельные перегрузки и поломка крыла при их превышении — не смоделированы.
  • Регулятор натяжения паруса (VG) сознательно не сделан («полиспасты, которые затягивают парус — не заморачиваемся», ответ пилота-консультанта) — поляры безмачтовых крыльев даны без него, как «средняя рабочая» настройка.

Линейка крыльев

В игре 48 крыльев с реальными прототипами в четырёх группах — по возрастанию качества и ветра, в котором комфортно стартовать. В меню «Полёт…» сначала выбирается группа, потом модель в ней. Все крылья, их числа и отметка «паспорт / аналог / оценка» у каждого — в разделе «Модели аппаратов». Ниже — первые девять крыльев, с которых начиналась линейка.

Классid: прототипПлощадь, м²Пилот, кгСваливаниеКачествоВетер до, м/с
Советские 1980-хslavutich_ut: Славутич-УТ17,4660–9025 км/ч6,2 @ 347
Советские 1980-хapogee: «Апогей» (В. Мысенко)14,450–10025,8 км/ч7,1 @ 36,810
Советские 1980-хatlas: советский «Атлас» (копия La Mouette Atlas)15,565–9527 км/ч8,4 @ 358
Учебные однообш.target: Aeros Target 1616,260–10027 км/ч7,2 @ 348
Учебные однообш.training: Wills Wing Falcon 17015,864–10024 км/ч9,0 @ 388
Мачтовые двухобш.magic: Airwave Magic IV 16615,465–10029 км/ч10,6 @ 4210
Мачтовые двухобш.laminar: Icaro Laminar Easy 1414,565–9530 км/ч13,2 @ 4610
Безмачтовыеsport: Moyes Litespeed RS 414,174–10427 км/ч15,0 @ 4512
Безмачтовыеcombat: Aeros Combat GT 13.213,270–11030 км/ч16,0 @ 5012

Данные — площадь, размах, диапазон массы пилота, ориентиры качества и скорости сваливания — сведены из паспортов производителей, клубных таблиц, Википедии и (для «Апогея», о котором в открытых источниках почти ничего нет) ответов пилота-консультанта; полная таблица источников с пометками достоверности — docs/archive/plan/wings-lineup.md §1, поляры и параметры каждого крыла — docs/research/pilot_mass.md и configs/wings/*.json.

Управляемость у каждого крыла — своя (через существующие параметры FlightModel, новых не понадобилось): например, «Апогей» — самое устойчивое крыло в наборе (roll_stability_per_s 1,25 против 0,75–1,1 у остальных, roll_overbank_deg 75), с самым мягким и медленным сваливанием (lift_loss_time_s 0,6 с, нос опускается раньше — на nose_drop_delay_s 0,35 с). У Icaro Laminar, наоборот, лёгкий и быстрый крен (roll_rate_max_dps 50). Aeros Combat GT — самое «жёсткое» и резкое в крене крыло набора.

Icaro Piuma сзади в полёте

Wills Wing T2C сзади в полёте

Какие варианты рассматривались

Изначальный запрос — широкая линейка реальных крыльев по классам, где в основе — модели, на которых летали пилоты-консультанты. Дальнейшие решения:

  • Регулятор натяжения паруса (VG) рассматривался отдельно (§5 плана): по мануалам Wills Wing T2C и Aeros Combat качество на VG растёт на 55–80 км/ч примерно на 10–15 %, но управление становится заметно тяжелее и медленнее в крене. Отклонён решением пользователя — карточка отменена, поляры безмачтовых крыльев даны без VG.
  • Прототип мачтового Laminar сначала числился безмачтовым; по уточнению пилота-консультанта — это мачтовое крыло класса Aeros/Airwave Magic, переехал в класс мачтовых двухобшивочных.
  • Терминология: «мачтовое/безмачтовое» вместо более старого «килевое/бескилевое» — по существу то же различие (наличие мачты с верхними тросами), но термин точнее.
  • Wills Wing Sport 2 был в наборе как прототип класса мачтовых, но убран из игры решением пользователя 28 сентября 2026 года: конфиг, 3D-модель и ключ названия удалены, id kingpost в тестах заменён на laminar (8633fa7, e2704c4) без слоя совместимости для сохранённых настроек — «пользователей нет».
  • Новые параметры FlightModel для управляемости «Апогея» тоже рассматривались отдельно (карточка 4), но отменены — нынешних параметров (устойчивость, скорость крена, параметры срыва) хватило, чтобы передать «очень лёгкое и устойчивое, прощает грубые ошибки».

Подробнее