Привет друзья. Написано уже половина романа, статьи о интересных моментах процессах тоже готовятся. А сейчас я хочу рассказать о том, как я для реалистичности тПривет друзья. Написано уже половина романа, статьи о интересных моментах процессах тоже готовятся. А сейчас я хочу рассказать о том, как я для реалистичности т

Писал роман — разработал экраноплан: используем ИИ и FreeCAD для инженерной проработки вымышленной техники

2026/02/23 15:23
17м. чтение

Привет друзья. Написано уже половина романа, статьи о интересных моментах процессах тоже готовятся. А сейчас я хочу рассказать о том, как я для реалистичности технических деталей романа пришлось разработать целый экраноплан. Да, именно забытые и не очень хорошо показавшие себя технологии на стыке авиации и судостроительства.

По сюжету романа нужна была такая машина, которая может двигаться ниже зоны действия радаров, незаметно, пользуясь складками местности. Обычные самолеты и вертолеты в принципе могут, но сильно прижаться к земле, чтобы идти в 1-3 метрах от поверхности земли им не под силу. Это зона действия только для экранопланов.

Модель вымышленного экраноплана "Тень"
Модель вымышленного экраноплана "Тень"

Давайте для начала разберемся с основными недостатками существующих экранопланов.

основные недостатки существующих экранопланов

  • Чувствительность к состоянию поверхности. Экраноплан живет за счет экранного эффекта — роста давления под крылом при приближении к поверхности. Но что, если эта поверхность перестает быть зеркально гладкой? Любая значительная волна превращает полет в опасное «прыгание»

  • Балансировка, продольная устойчивость машины. Центр давления на крыле при изменении высоты полета смещается. Если нос чуть приподнимается, экранный эффект ослабевает, машина «проседает», и если автоматика или пилот не компенсируют это мгновенно — неизбежен удар о воду или «кобрирование» (резкий взмыв вверх с последующим сваливанием).

  • Переходные режимы. Требуется колоссальная избыточная мощность двигателей, которая в крейсерском режиме становится «балластом». Это делает экранопланы крайне неэкономичными по сравнению с обычными самолетами или судами на подводных крыльях

Это главные недостатки, которые реально не делают их интересными и для эксплуатации, и для конструкторов. Но если задуматься - а можно ли эти недостатки победить на существующем уровне развития технологий? Ида, в принципе это возможно. Ниже решения, которые мы проработали с нейросетями.

Решения лечения детских болезней экранопланов

  • Проблема: Продольная неустойчивость («скачки» по тангажу)

    Решение: Схема «Утка» с активным канардом. Переднее горизонтальное оперение работает в возмущенном потоке первым, а ИИ-контроллер меняет его угол атаки сотни раз в секунду, демпфируя колебания еще до того, как их почувствует основной корпус.

    • Проблема: Тяжелый взлет («горб» сопротивления)

      Решение: Распределенная электрическая тяга (DEP). Вместо двух монструозных двигателей — каскад электромоторов по передней кромке. На взлете они создают мощный статический поддув под крыло, буквально выталкивая машину из воды на воздушную подушку без лишнего разбега.

      • Проблема: Боязнь волнения и турбулентности

        Решение: Управление пограничным слоем (BLI). Использование части вентиляторов DEP для активного отсоса или выдува воздуха с поверхности крыла. Это позволяет мгновенно менять подъемную силу без движения механических закрылков, «сглаживая» удары воздушных потоков от волн.

      • Дополнительно: Ошибки пилотирования на сверхмалых высотах

        Решение: Сенсорный стек (Лидар + Нейросеть). Лидар сканирует профиль воды на километр вперед, а нейросеть (обученная на моем «правильном скрипте») заранее вычисляет траекторию обхода препятствий, делая полет безопаснее, чем на обычном лайнере. К слову полного доверия нейросетям тут не должно быть. Нейросеть рисует маршрут, но физика в лице жесткого алгоритма ставит на нем печать «Одобрено». Если ИИ предлагает маневр, нарушающий законы аэродинамики, управление перехватывает классический PID-регулятор и просто удерживает горизонт.

      В общем на основании таких технических возможностей современной (и в некоторых случаях еще лабораторной, находящейся в испытаниях) науки и техники мы разработали характеристики планера с полными ТТХ машины.

      Технический паспорт

      Скрытый текст

      ТЕХНИЧЕСКИЙ ПАСПОРТ ЭКРАНОПЛАНА «ТЕНЬ-М» (014М4)

      Версия 3.1 — Спецификация экспериментального образца

      Статус: Проектная документация, в разработке, на стадии тестирования
      Назначение документа: Техническое описание экспериментального экраноплана с гибридной силовой установкой и системами активного управления

      РАЗДЕЛ 1: ОБЩИЕ СВЕДЕНИЯ

      1.1. Классификация и назначение

      Параметр

      Значение

      Тип аппарата

      Экраноплан (ground effect vehicle)

      Класс

      Многоцелевой транспортный

      Силовая установка

      Гибридная: 1 × ТРДД + 24 × электродвигателя КВ-24

      Режимы полёта

      Экранный (3–5 м), переходный, самолётный, висение (до 180 с)

      Конструкционный стандарт

      Композитный планер с интегрированными системами

      РАЗДЕЛ 2: ГЕОМЕТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ

      2.1. Основные размеры

      Параметр

      Значение

      Длина фюзеляжа

      11 200 мм

      Ширина фюзеляжа (макс.)

      2 600 мм

      Высота фюзеляжа (макс.)

      2 200 мм

      Высота на шасси

      3 500 мм

      2.2. Фюзеляж (опорные сечения)

      X (мм)

      Ширина (мм)

      Высота (мм)

      Смещение центра (мм)

      0

      200

      400

      200

      2 000

      1 600

      2 400

      1 000

      5 500

      2 600

      2 200

      1 000

      9 000

      1 800

      1 800

      800

      11 200

      600

      800

      400

      2.3. Крыло

      Параметр

      Значение

      Профиль

      NACA 4412 (модифицированный)

      Размах

      13 000 мм

      Площадь

      50 м²

      Угол обратной стреловидности

      Сечения крыла:

      X (мм)

      Y (мм)

      Z (мм)

      Хорда (мм)

      Относительная толщина

      3 500

      600

      900

      4 800

      14%

      3 300

      2 800

      930

      4 200

      13%

      3 050

      4 500

      970

      3 600

      12%

      2 650

      6 500

      1 050

      2 800

      10%

      2.4. Законцовки крыла (эндплейты/V-кили)

      На законцовках крыла установлены вертикальные (с небольшим наклоном) законцовки — эндплейты, выполняющие функцию дополнительного оперения и снижения индуктивного сопротивления.

      Параметр

      Значение

      Высота законцовки

      1 100 мм

      Наклон

      8° назад, 3° наружу

      Хорда у основания

      2 800 мм

      Хорда у вершины

      1 624 мм

      Относительная толщина

      10% (осн.) / 8.8% (верш.)

      2.5. Переднее горизонтальное оперение (канард)

      Параметр

      Значение

      Профиль

      NACA 4412

      Размах

      2 400 мм

      Корневая хорда

      1 800 мм

      Концевая хорда

      1 260 мм

      Угол установки

      0.5° (относительно горизонтали)

      Положение (X)

      800 мм

      2.6. Рули высоты (элеваторы)

      Параметр

      Значение

      Профиль

      NACA 4412

      Размах

      2 400 мм

      Хорда

      540 мм

      Положение (X)

      2 060 мм

      2.7. Вертикальное оперение (V-образные кили)

      Два V-образных киля, интегрированных в хвостовую часть фюзеляжа.

      Сечения левого киля (отрицательные Y):

      X (мм)

      Y (мм)

      Z (мм)

      Хорда (мм)

      9 000

      -1 100

      1 700

      2 200

      9 600

      -800

      1 700

      1 600

      10 200

      -500

      1 700

      1 000

      10 750

      -225

      1 700

      450

      Вершина киля:

      Параметр

      Значение

      X

      10 300 мм

      Y

      ±1 850 мм

      Z

      3 500 мм

      Хорда

      600 мм

      Промежуточные сечения: 25%, 50%, 75% высоты для обеспечения плавности формы.

      2.8. Заднее горизонтальное оперение (Т-стабилизатор)

      На вершинах килей установлен Т-образный стабилизатор.

      Параметр

      Значение

      Корневая хорда

      1 400 мм

      Концевая хорда

      620 мм

      Размах

      2 200 мм

      Вынос вперёд

      420 мм

      Профиль

      NACA 4412

      2.9. Грузовой отсек

      Параметр

      Значение

      Длина

      4 500 мм

      Ширина

      2 100 мм

      Высота

      1 700 мм

      Объём

      16 м³

      Грузовой люк

      Аппарель в хвостовой части

      Грузоподъёмное устройство

      «Ловчая Лапа» (раздвижной пол, лебёдка, траверса)

      РАЗДЕЛ 3: СИСТЕМА КВ-24 (ВЕНТИЛЯТОРЫ)

      3.1. Расположение вентиляторов

      24 электродвигателя с тянущими винтами расположены в задней кромке крыла,
      по 12 на каждой консоли.

      3.2. Характеристики вентилятора

      Параметр

      Значение

      Диаметр наружного кожуха

      320 мм

      Диаметр вентилятора

      290 мм

      Длина кожуха

      600 мм

      Угол наклона оси

      15° вниз

      Материал

      Композитный

      Привод

      Электродвигатель

      РАЗДЕЛ 4: СИЛОВАЯ УСТАНОВКА

      4.1. Архитектура

      Гибридная: один маршевый турбовентиляторный двигатель + распределённая электрическая тяга (24 вентилятора КВ-24) + система кратковременного форсажа на перекиси водорода.

      4.2. Маршевый двигатель

      Параметр

      Значение

      Тип

      Турбовентиляторный двухконтурный (ТРДД)

      Модель

      ТВ7-117СМ-Ф (форсированный)

      Производитель

      АО «ОДК-Климов»

      Характеристики:

      Режим

      Тяга (кгс)

      Расход топлива (кг/ч)

      Температура газов (°C)

      Крейсерский (50%)

      1 800

      450–550

      950

      Повышенный (70%)

      2 500

      700

      1 050

      Взлётный (100%)

      3 600

      950

      1 150

      Форсаж (с HTP)

      6 000

      2 200

      1 400

      4.3. Воздухозаборник

      Параметр

      Значение

      Расположение (X)

      3 000–4 000 мм

      Расположение (Z)

      Верхняя часть фюзеляжа

      Диаметр

      600 мм

      Тип

      Регулируемый, с защитными створками

      4.4. Реактивное сопло

      Параметр

      Значение

      Расположение (X)

      10 500–11 000 мм

      Форма

      Прямоугольная, 400 × 200 мм

      Регулировка

      Подвижные створки для изменения вектора тяги

      4.5. Генератор и аккумуляторы

      Параметр

      Значение

      Генератор

      Высокооборотный синхронный, 1.8 МВт, 115/400 Гц, масса 550 кг

      Аккумуляторы

      Литий-воздушные (Li-air), 250 кВт·ч, удельная энергия 500 Вт·ч/кг, масса 500 кг

      РАЗДЕЛ 5: ТОПЛИВО И РАБОЧИЕ ТЕЛА

      Вид

      Масса (кг)

      Объём (л)

      Назначение

      Керосин JP-8

      2 000

      2 500

      Основное топливо для ТРДД

      HTP (98%)

      400

      330

      50% — система управления, 50% — форсаж висения

      РАЗДЕЛ 6: МАССО-ГАБАРИТНЫЕ ХАРАКТЕРИСТИКИ

      6.1. Минимальный оперативный вес (OEW)

      Элемент

      Масса (кг)

      Фюзеляж (композит)

      1 200

      Крыло (с наплывами)

      1 800

      Оперение (V-кили + Т-стаб + канард)

      600

      Система КВ-24 (24 вентилятора)

      1 500

      Системы управления

      800

      Маршевый двигатель с системами

      1 550

      Система HTP

      230

      Прочие системы

      420

      ИТОГО OEW

      8 100

      6.2. Максимальная взлётная масса (MTOW)

      Параметр

      Масса (кг)

      OEW

      8 100

      Керосин (2 000 кг)

      2 000

      HTP (400 кг)

      400

      Экипаж (2 чел)

      200

      Масса без груза

      10 700

      Полезная нагрузка (макс.)

      1 000

      ИТОГО MTOW

      11 700

      РАЗДЕЛ 7: ЛЁТНО-ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

      Параметр

      Значение

      Крейсерская скорость (экран)

      260–300 км/ч

      Максимальная скорость

      420 км/ч

      Дальность (с нагрузкой 1 000 кг)

      1 850 км

      Практический потолок

      3 500 м

      Потолок висения

      1 500 м

      Длина разбега/пробега

      50–70 м

      Длительность висения (штатный)

      120 с

      Длительность висения (макс.)

      180 с

      РАЗДЕЛ 8: КЛЮЧЕВЫЕ СИСТЕМЫ

      • Комплекс малозаметности «ПОКРОВ-М2» — плазменные ячейки в передних кромках.

      • Система «Рефлекс-М» — импульсное управление на HTP.

      • Бортовой комплекс «УЛЕЙ-М» — ИИ управления, координация группы, управление роем дронов.

      • Защита от ЭМИ «ФАРАД-М» — пассивное и активное подавление.

      РАЗДЕЛ 9: ЭКСПЛУАТАЦИОННЫЕ ПОКАЗАТЕЛИ

      Параметр

      Значение

      Назначенный ресурс

      5 500 лётных часов / 18 лет

      Стоимость единицы (серийная)

      ≈ 4.2 млрд руб.

      Годовая стоимость эксплуатации

      ≈ 800 млн руб.

      Но сделать паспорт машины это одно. Как же она будет выглядеть?

      Нейросети делают модель экраноплана

      Хотя и уверенно работаю в CAD системах, но мне было лень по этим ТТХ строить модель машины. Во первых я смутно представлял его внешний вид и что именно стоит делать. Во вторых это займет много времени. Я ведь считаю затраты времени не только на само моделирование, но и поиск тех же профилей NACA для крыла.
      Но DeepSeek сам подсказал решение. FreeCAD имеет собственную консоль на Python, нейросети делают скрипт - запускаю его и модель строится сама. Звучит красиво. На практике вышло не очень легко, но это тоже опыт.
      Нейросети ошибались, ломали модель, крылья создавались вдалеке от фюзеляжа. По итогу несколько часов работы сначала в DeepSeek, потом в Gemini, с доработкой в Claude и получилась вполне вменяемая модель, которую частично уже сейчас даже можно проверить и на аэродинамику.
      При всем этом, по внешнему виду, модель получилась вполне летабельной.

      Экраноплан Тень. Вид Спереди
      Экраноплан Тень. Вид Спереди
      Экраноплан Тень. Вид сбоку
      Экраноплан Тень. Вид сбоку
      Экраноплан Тень. Вид сверху
      Экраноплан Тень. Вид сверху

      Попозже я попробую изучить и аэродинамику модели. Уж очень интересно, что покажет анализ.

      Для этого буду использовать FreeCAD с верстаком CfdOF (Computational Fluid Dynamics for OpenFOAM).

      Самое сложное было — заставить ИИ понять, что вентиляторы КВ-24 должны быть интегрированы в заднюю кромку, а не просто висеть в воздухе. В итоге, после десятка требований дотянуть их до крыла, FreeCAD выдал геометрию, которую вы видите на рендерах. Она выглядит футуристично, но при этом функционально — каждый элемент здесь оправдан расчетами. Однако пока вентиляторы не полноценны для CFD анализа, так как просто воткнуты в крыло. Возможно будут править вручную или продолжу пытать себя и нейросети.

      Зачем вообще мне так напрягаться?

      Мог ли я просто написать в романе: «Они сели в быстрый экраноплан и полетели»? Конечно. Но когда у тебя в руках есть ТТХ, когда ты знаешь, что на скорости 150 км/ч твоя машина ест 120 литров топлива и «чувствует» экран на высоте до 1.5 метров, сцена меняется.

      1. Сюжет, продиктованный физикой, а не фантазией Я хотел максимально реалистичных действий. В моей книге нет «двигателей на мане», которые работают столько, сколько нужно автору. Есть жесткие цифры:

      • Топливный лимит: Если на скорости 150 км/ч машина ест 120 литров в час, а в баках осталось на два часа лета — герои не долетят до цели магическим образом. Им нужна дозаправка, им нужно искать решение, рисковать. Сюжет подгоняется под реальность, а не наоборот.

      • Эргономика страдания: Ограничения по тоннажу и объему грузового отсека экраноплана "Тень" — это не просто строчки в таблице. Это значит, что десант сидит в тесноте, плечом к плечу, в душном отсеке, где каждый лишний килограмм оборудования может сорвать взлет. Герои не катаются на стерильном звездолете будущего — они выживают в тесной, ревущей и сложной машине. Это дает ту самую глубину сопереживания, которую невозможно выдумать.

      2. Наследие Жюля Верна Вспомните «Наутилус» капитана Немо или «Альбатрос» Робура-Завоевателя. Жюль Верн не просто говорил «они поплыли под водой». Он давал конкретные размеры, описывал конструкцию двигателей, балластных цистерн и внутреннее устройство. Результат? Читатель верил в эти аппараты настолько, что десятилетия спустя инженеры получали реальные патенты, основываясь на описаниях из его романов. Я верю, что достоверность в деталях — это то, что отличает «чтиво на вечер» от мира, в который хочется вернуться.

      3. ИИ как соавтор-инженер Именно здесь нейросети стали незаменимы. Когда я говорил: «Мне нужно перевезти 1 тонну груза на 2000 км, рассчитай потребную мощность», — ИИ не просто выдавал цифру, он заставлял меня пересматривать компоновку фюзеляжа. Это был диалог с «виртуальным КБ», где физика была главным цензором.

      Выводы эксперимента

      Работа над экранопланом "Тень" для романа в итоге переросла из литературного упражнения в полноценный технический концепт. Как инженер, я пришел к следующим выводам:

      1. Неожиданный итог! Традиционные экранопланы страдали от узкого эксплуатационного диапазона. Использование распределенной электрической тяги (DEP) в связке с канардом (это небольшое предварительное крыло у носа самолета или экраноплана) полностью меняет уравнение. Мы доказали (пусть пока только в умах нейросетей), что активное управление пограничным слоем позволяет демпфировать продольные колебания, которые раньше делали полет на экране опасным аттракционом. Возможно это даст развитие старой недоделанной технологии в будущем.

      2. Инструментарий: ИИ как исполнительный механизм Нейросети для меня не «творцы», а интерфейс к CAD-системам. DeepSeek/Claude/Gemini/ChatGPT выполняли роль младших конструкторов: писали Python-скрипты для FreeCAD, рассчитывали координаты профилей NACA и генерировали элементы. Учитывая, что именно с FreeCAD я не разбирался и не могу в нем работать - это было интересно. Вручную я бы скорее все делал в Компас-3D.

      3. Реализм как метод тестирования Я решил написать именно такой роман, который сам бы хотел прочитать: без «голливудских сказок», на основе чего-то реально ощутимого, во что я сам мог бы поверить как профессионал. Здесь физика диктует сценарий: если конструкция не позволяет выполнить задачу по сюжету — это не проблема сюжета, которую можно исправить парой строк. Это технический сигнал к тому, чтобы вернуться к чертежам и пересмотреть саму конструкцию. Либо необходимо изменить проведение самой операции так, чтобы можно было полагаться на существующие возможности. Сюжет здесь не оправдание для магии, а суровая проверка инженерной гипотезы.

      4. Нет плохих идей, есть несовершенство технологий. Экранопланы не взлетели в XX веке не из-за порочности идеи, а из-за отсутствия систем управления и материалов, которые есть у нас сейчас. Сегодня, используя связку из ИИ, Python и современных систем автоматизированного проектирования, один инженер может реанимировать целые классы техники, показав новый взгляд на осуществление этих конструкций.


      ГЛАВНОЕ ПРЕДУПРЕЖДЕНИЕ!

      При всех описанных в статье преимуществах важно помнить главное- нейросети не являются специалистами. Они могут помочь, как например мне в создании более-менее реалистичного, хоть и футуристичного мира. Но реальное создание конструкций и аппаратов должно вестись под руководством опытных специалистов в этой сфере!


      Статус проекта

      На текущий момент мы имеем готовую геометрию, ТТХ и понимание принципов управления. Следующий логический шаг — полноценный CFD-анализ в OpenFOAM. Нужно подтвердить расчетные коэффициенты подъемной силы при взаимодействии с экраном на разных скоростях. И этим я займусь в ближайшем будущем.

      Вопрос к сообществу

      Заканчивая этот обзор, я хотел бы задать пару вопросов читателям Хабра, чьи профессиональные компетенции и личный опыт мне очень интересны:

      1. Насколько, по вашему мнению, допустим «технический реализм» в художественной литературе? Стоит ли авторам уходить в такие детали, как расчеты профилей крыла и расхода топлива, если это усложняет текст? Или именно такая «честная» инженерия и делает вымышленный мир по-настоящему живым и убедительным?

      2. Как вы считаете, какие возможности текущий уровень развития техники (ИИ, аддитивные технологии, новые композиты) может дать старым технологиям и «забытым» изобретениям? Я на своем примере увидел, как связка из LLM и CAD-систем способна вдохнуть новую жизнь в концепт экраноплана. Есть ли у вас идеи или примеры того, что ещё стоит «реанимировать» с помощью современных инженерных инструментов?

      Дополнение для любопытных

      Если Вам интересно, я прикладываю скрипт для построения модели экраноплана. Для CFD он еще не готов в полной мере, поэтому я думаю его еще не раз изменю, но запустить его в FreeCAD и посмотреть саму модель возможно.

      Процесс проектирования продолжается параллельно с написанием глав. Если среди читателей есть специалисты по аэродинамике, буду благодарен за критику ТТХ — в моем мире физика важнее авторского произвола

      Скрытый текст

      -- coding: utf-8 --

      TEN_M_V7 — ПОЛНОСТЬЮ ИСПРАВЛЕННАЯ ВЕРСИЯ

      import FreeCAD as App
      import Part
      import math
      from FreeCAD import Base
      import os

      doc = App.newDocument("TEN_M_V7")

      =====================================================

      Фюзеляж — сечения

      =====================================================

      FUSFRAMES = [
      (0, 200, 400, 200),
      (2000, 1600, 2400, 1000),
      (5500, 2600, 2200, 1000),
      (9000, 1800, 1800, 800),
      (11200, 600, 800, 400),
      ]

      def fus_z_top(x):
      for i in range(len(_FUS_FRAMES)-1):
      x1,w1,h1,o1 = FUSFRAMES[i]
      x2,w2,h2,o2 = FUSFRAMES[i+1]
      if x1 <= x <= x2:
      t = (x-x1)/(x2-x1)
      h = h1 + (h2-h1)*t
      o = o1 + (o2-o1)*t
      return o + h/2
      return FUSFRAMES[-1][3] + FUSFRAMES[-1][2]/2

      def fus_y_max(x):
      for i in range(len(FUS_FRAMES)-1): x1,w1,,_ = FUS_FRAMES[i] x2,w2,,_ = FUSFRAMES[i+1]
      if x1 <= x <= x2:
      t = (x-x1)/(x2-x1)
      w = w1 + (w2-w1)*t
      return w/2
      return FUSFRAMES[-1][1]/2

      =====================================================

      NACA ПРОФИЛЬ — возвращает Wire

      =====================================================

      def naca4(t, chord, n=80):
      pts = []
      for i in range(n+1):
      x = i/float(n)
      yt = 5t(0.2969math.sqrt(x)-0.1260x-0.3516x**2+0.2843x3-0.1015*x4)
      pts.append(Base.Vector(xchord, 0, ytchord))
      for i in range(n,-1,-1):
      x = i/float(n)
      yt = 5t(0.2969math.sqrt(x)-0.1260x-0.3516x**2+0.2843x3-0.1015*x4)
      pts.append(Base.Vector(xchord, 0, -ytchord))
      pts.append(pts[0])
      return Part.Wire(Part.makePolygon(pts))

      =====================================================

      КРЫЛО

      =====================================================

      wing_data = [
      (3500, 600, 900, 4800, 0.14),
      (3300, 2800, 930, 4200, 0.13),
      (3050, 4500, 970, 3600, 0.12),
      (2650, 6500, 1050, 2800, 0.10),
      ]
      tip_x, tip_y, tip_z = 2650, 6500, 1050
      tip_chord, tip_t = 2800, 0.10

      sects = []
      for x,y,z,c,t in wing_data:
      p = naca4(t, c)
      p.translate(Base.Vector(x, y, z))
      sects.append(p)

      wingL = Part.makeLoft(sects, True, False)

      =====================================================

      ЭНДПЛЕЙТ

      =====================================================

      def create_endplate(tip_x, tip_y, tip_z, chord, t, depth):
      taper = 0.58
      sweep = math.tan(math.radians(8)) depth
      cant = math.tan(math.radians(3))
      depth

      root = naca4(t, chord) root.translate(Base.Vector(tip_x, tip_y, tip_z)) vtip = naca4(t*0.88, chord*taper) vtip.translate(Base.Vector(tip_x+sweep, tip_y+cant, tip_z-depth)) ep = Part.makeLoft([root, vtip], True, False) # Нижняя запирающая пластина pl = chord*0.48 pt = 90 ep = ep.fuse(Part.makeBox(pl, pt, 65, Base.Vector(tip_x + chord*0.26, tip_y+cant-pt/2, tip_z-depth-32))).removeSplitter() return ep

      wingletL = create_endplate(tip_x, tip_y, tip_z, tip_chord, tip_t, 1100)
      wingL = wingL.fuse(wingletL).removeSplitter()
      wingR = wingL.mirror(Base.Vector(0,0,0), Base.Vector(0,1,0))

      =====================================================

      КАНАРД

      =====================================================

      def create_canard():
      root = naca4(0.12, 1800)
      root.translate(Base.Vector(800,0,700))
      tL = naca4(0.12, 1260)
      tL.translate(Base.Vector(800,-1200,700))
      tR = naca4(0.12, 1260)
      tR.translate(Base.Vector(800,1200,700))
      s = Part.makeLoft([tL, root, tR], True, False)
      s.rotate(Base.Vector(800,0,700), Base.Vector(0,1,0), 0.5)
      return s

      def create_elevator():
      l = naca4(0.12, 540)
      l.translate(Base.Vector(2060,-1200,700))
      r = naca4(0.12, 540)
      r.translate(Base.Vector(2060,1200,700))
      return Part.makeLoft([l, r], True, False)

      =====================================================

      V-КИЛЬ — с плавными сечениями

      =====================================================

      def create_vstab(side):
      TE_x = 11200
      root_stations = [(9000,2200),(9600,1600),(10200,1000),(10750,450)]
      loft_sects = []

      for x_le, chord in root_stations: z = fus_z_top(x_le) y = side * fus_y_max(x_le) sec = naca4(0.12, chord) sec.rotate(Base.Vector(0,0,0), Base.Vector(1,0,0), 90) sec.translate(Base.Vector(x_le,y,z)) loft_sects.append(sec) print(f"Корень {side}: x={x_le}, y={y:.1f}, z={z:.1f}, chord={chord}") # Вершина киля h = 1800 tilt = 22 last_x, last_chord = root_stations[-1] last_z = fus_z_top(last_x) last_y = side * fus_y_max(last_x) x_tip = 10300 y_tip = side*(abs(last_y) + math.tan(math.radians(tilt))*h) z_tip = last_z + h chord_tip = 600 # Добавляем промежуточные сечения для плавного Loft for f in [0.25,0.5,0.75]: xi = last_x + f*(x_tip-last_x) yi = last_y + f*(y_tip-last_y) zi = last_z + f*(z_tip-last_z) ci = chord_tip + (last_chord - chord_tip)*(1-f) s = naca4(0.12, ci) s.rotate(Base.Vector(0,0,0), Base.Vector(1,0,0), 90) s.translate(Base.Vector(xi, yi, zi)) loft_sects.append(s) tip_sec = naca4(0.12, chord_tip) tip_sec.rotate(Base.Vector(0,0,0), Base.Vector(1,0,0), 90) tip_sec.translate(Base.Vector(x_tip, y_tip, z_tip)) loft_sects.append(tip_sec) print(f"Вершина {side}: x={x_tip}, y={y_tip:.1f}, z={z_tip:.1f}, chord={chord_tip}") fin = Part.makeLoft(loft_sects, True, False) return fin, (x_tip, y_tip, z_tip)

      =====================================================

      T-СТАБИЛИЗАТОР

      =====================================================

      def create_hstab(x_tip, z_tip):
      cr, ct = 1400, 620
      sh, sw = 2200, 420
      root = naca4(0.12, cr)
      root.translate(Base.Vector(x_tip,0,z_tip))
      tL = naca4(0.12, ct)
      tL.translate(Base.Vector(x_tip+sw,-sh,z_tip))
      tR = naca4(0.12, ct)
      tR.translate(Base.Vector(x_tip+sw, sh,z_tip))
      return Part.makeLoft([tL, root, tR], True, False)

      =====================================================

      ФЮЗЕЛЯЖ

      =====================================================

      def frame(x, w, h, offset):
      pts=[]
      for i in range(61):
      a = 2math.pii/60
      pts.append(Base.Vector(x,(w/2)*math.cos(a), offset+(h/2)*math.sin(a)))
      pts.append(pts[0])
      return Part.Face(Part.makePolygon(pts))

      frames = [frame(x,w,h,o) for x,w,h,o in FUSFRAMES]
      fuselage = Part.makeLoft(frames, True, False)

      =====================================================

      Построение килей

      =====================================================

      kielL, (x_tk, y_tk, z_tk) = create_vstab(-1)
      kielR, = createvstab(1)
      fuselage = fuselage.fuse([kielL,kielR]).removeSplitter()

      =====================================================

      Остальные элементы

      =====================================================

      hstab = create_hstab(x_tk, z_tk)
      canard = create_canard()
      elevator = create_elevator()

      =====================================================

      ВЕНТИЛЯТОРЫ

      =====================================================

      def te_x(y):
      data=[(600,8300),(2800,7500),(4500,6650),(6500,5450)]
      y=abs(y)
      for i in range(len(data)-1):
      y1,x1=data[i]; y2,x2=data[i+1]
      if y1<=y<=y2:
      return x1+(y-y1)*(x2-x1)/(y2-y1)
      return 5450

      fans=[]
      for i in range(12):
      cy = 1600 + i*(5800-1600)/11
      cx = te_x(cy)-400
      pos = Base.Vector(cx,cy,1080)
      outer = Part.makeCylinder(160,600,pos,Base.Vector(1,0,0))
      inner = Part.makeCylinder(145,610,pos,Base.Vector(1,0,0))
      fan = outer.cut(inner)
      fan.rotate(pos, Base.Vector(0,1,0), 15)
      fans.append(fan)

      fansL = Part.makeCompound(fans)
      fansR = fansL.mirror(Base.Vector(0,0,0), Base.Vector(0,1,0))

      =====================================================

      CFD FLUID DOMAIN

      =====================================================

      all_aero = [fuselage, wingL, wingR, canard, elevator, hstab]
      bb_xmin = min(s.BoundBox.XMin for s in all_aero)
      bb_xmax = max(s.BoundBox.XMax for s in all_aero)
      bb_ymin = min(s.BoundBox.YMin for s in all_aero)
      bb_ymax = max(s.BoundBox.YMax for s in all_aero)
      bb_zmin = min(s.BoundBox.ZMin for s in all_aero)
      bb_zmax = max(s.BoundBox.ZMax for s in all_aero)

      domain = Part.makeBox((bb_xmax-bb_xmin)+5000+20000,
      (bb_ymax-bb_ymin)+2*10000,
      (bb_zmax-bb_zmin)+10000+1500,
      Base.Vector(bb_xmin-5000, bb_ymin-10000, bb_zmin-1500))

      fluid_domain = domain.cut(all_aero + [fansL, fansR])

      =====================================================

      ЭКСПОРТ

      =====================================================

      out = "C:/Temp"
      os.makedirs(out, exist_ok=True)
      Part.export([fluid_domain], out+"/TEN_M_V7_fluid_domain.step")
      print("\nSTEP:", out+"/TEN_M_V7_fluid_domain.step")

      =====================================================

      ПОКАЗ

      =====================================================

      def show(shape,name,color,transp=0):
      o = doc.addObject("Part::Feature", name)
      o.Shape = shape
      o.ViewObject.ShapeColor = color
      o.ViewObject.Transparency = transp
      return o

      show(fuselage,"Body",(0.30,0.30,0.35))
      show(wingL,"Wing_L",(0.75,0.75,0.75))
      show(wingR,"Wing_R",(0.75,0.75,0.75))
      show(fansL,"Fans_L",(0.10,0.10,0.10))
      show(fansR,"Fans_R",(0.10,0.10,0.10))
      show(canard,"Canard",(0.70,0.70,0.70))
      show(elevator,"Elevator",(0.50,0.50,0.50))
      show(hstab,"HStab_T",(0.65,0.65,0.65))
      show(fluid_domain,"FluidDomain",(0.20,0.50,0.80),88)

      doc.recompute()
      print("\nTEN_M_V7: ГОТОВО. Киль построен без узелков!")

      Возможно даже кто-то подскажет пути его совершенствования.

Источник

Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу [email protected] для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.

Быстрое чтение

Еще

Цена Conway Research (CONWAY) в сравнении с ценой Bitcoin (BTC) дает инвесторам четкое представление о том, как этот развивающийся мемкоин соотносится с крупнейшей криптовалютой. Поскольку BTC остается эталоном крипторынка, анализ динамики цен CONWAY vs BTC выявляет относительную силу, волатильность и возможности для трейдеров, ищущих прогнозы цены Conway Research и данные для сравнения цен Bitcoin.

Сравнение цены Conway Research (CONWAY) с ценой Ethereum (ETH) предлагает ценную перспективу для трейдеров и инвесторов. Поскольку ETH является второй по величине криптовалютой по рыночной капитализации и краеугольным камнем децентрализованных финансов, анализ его производительности по сравнению с CONWAY помогает выявить как конкурентные преимущества, так и потенциальные возможности роста.