Поиск    Список пользователей    Группы пользователей    Регистрация (Registration)    Профиль (Profile)     Личные сообщения    Вход  

   Форум у C!NEMAXiMUS-a >> Cinema 4D >> X-Presso: thinking particles (Часть 2)
     
Открыть новую тему   Ответить на тему
<< Предыдущая тема :: Следующая тема >>  
Автор Сообщение
magvai
Завсегдатай




Зарегистрирован: 10.01.2005
Сообщений: 285
Страна (Country): Россия
Екатеринбург
Версия Cinema4D (Version):13
X-Presso: thinking particles (Часть 2) Ответить на тему Ответить с цитатой

В первой части я предложил общественности моё TP-решение модели взаимодействия частиц в сплошной среде. Сейчас, спустя много времени, я решил продолжить физическое моделирование в Cinema4d. На сей раз задача будет гораздо проще, модель будет вообще стандартная, а математики (я надеюсь) не будет вовсе. Я постараюсь как можно внятнее объяснить где какой элемент найти, но надеюсь на базовые знания уважаемого читателя. Всё-таки я создаю некоторое how to, а не урок по интерфейсу Синьки, поэтому не стоит надеяться найти здесь подробных деревьев команд меню, сочетаний клавиш и пр. Все термины предполагают английский интерфейс программы и лояльное отношение читателя к искажению математических и физических терминов.
Итак:

Реалистичная ракета в Космосе

Возникла идея у меня: создать средствами TP реактивную ракету. Неймётся мне что-то сотворить, да и искать готовое решение лень.
Со времён Циолковского человечество всерьёз озадачено особенностью реактивного движения. Практика показала, что реактивное движение в Космосе ни капельки не движение знакомых нам средств передвижения. Это на Земле - куда крутишь руль, туда и едешь. В Космосе всё иначе: направление движения ракеты отнюдь не совпадает с её осью, и даже не противоположно направлению истечения газов. Да и с тем чтобы затормозить проблемы - здесь (то есть Там) мало просто отпустить педаль газа, надо двигатель на реверс перевести. Помните "Москва-Кассиопея"?
Quote:
Двигатели на торможение

Вот сейчас и займёмся созданием простенькой ракеты.
Оговорюсь сразу, что я собираюсь создать не модель для расчёта полёта на Марс (что тоже не очень трудно), а просто физичненько пыхтящий космолётик.

Теория почти что и кончилась (немного дополню по ходу), можно приступать к практике.

Для начала создадим пару объектов на сцене: Null Object и Matrix Object (MoGraph). Первый будет вспомогательным, я назову его TP_System и назначу ему тег X-Presso.
Настройки атрибутов Matrix Object видны на скрине:


Далее надо настроить группы частиц (в менеджере XPresso Editor -> Custom -> Thinking Particles Settings...). Я сделал две группы в продгруппе All: Rocket и Gas.


Группу Rocket перетаскиваем в поле TP Group в атрибутах Matrix Object. И на этот самый Matrix Object добавим UserData: Действительное неотрицательное число (хотя, отрицательное было бы смешно понаблюдать) я назвал Momentum - будет означать импульс, получаемый ракетой от рабочего тела. Для красивого полёта я выбрал значение "2", читатель может экспериментировать, помня, что "0" - полное отсутствие тяги.

Пока нам не потребуются новые объекты, так что сосредоточимся на редакторе Xpresso.
Заставим ракету перд... э.... испускать газ.
Нам понадобятся ноды: перечислитель P Pass, помощник PGetData, генератор PStorm и стандартная PGroup. Далее череда нудных (но нужных) настроек атрибутов нодов:
перечислитель P Pass:
- в Group указываем группу частиц Rocket
помощник PGetData:
- два (пока) выхода Position и Alignment
генератор PStorm:
- два (пока) входа Emitter Position и Emitter Alignment
- Birth Type -> Rate
- Life variation -> 10%
- Fov'ы и Size'ы читатель сможет подобрать самостоятельно, как только нарисует форму ракеты
стандартная PGroup:
- в Group указываем группу частиц Gas

Соединяем входы-выходы:


Теперь частица-ракета испускает частицы-газ. Но испускает она вперёд (а нормальные ракеты испускают назад), поэтому связь Alignment->Emitter Alignment надо пропустить через отрицатель Negate (для типа данных Матрицы).

Здесь надо добавить, что по началу я пытался изобретать подпрограммы на XPresso или на coffee для решения задач высшей математики, по привычке полагая, что авторы ПО просто базовый набор арифметики вложили в своё творение. Но внезапно обнаружил, что разработчики весьма основательно подошли к созданию языка Xpresso, и матчасть в нём на высоте (кроме мелких непонятностей, оговоренных, например, в первой части). Например нод Negate (отрицание) великолепно справляется с превращением как чисел (5 -> -5), так и векторов (вектор разворачивается), и, даже, матриц. Инверт с лёгкостью получит как число в -1 степени, так и матрицу обратную данной! В общем, линейная алгебра и аналитическая геометрия тут просто зашибись!. Разве что нехватка комплексных чисел иногда отвлекает, но и это с лёгкостью компенсируется математическими хитростями. Особого внимания заслуживают матрицы в XPresso (об этом я надеюсь ещё написать) - сущности весьма примечательные и отличные от матриц в линейной алгебре некоторым сужением описания - в синьке матрицы только 3*4 и формально означают три набора направляющих косинусов и сдвиг. И нигде - ни в одной документации я не встречал еще подробного описания математических функций для различных типов данных

Сейчас провернём хитрую операцию по созданию движения ракеты: она должна двигаться вперёд ускоряясь с определённым импульсом (Momentum).
Добавим Динамик PVelocity и нод-объект Rocket (Matrix Object, см. мэнеджер объектов на первой картинке). Из объекта Matrix Object нам нужен выход UserData-Momentum, а в PVelocity входы Ditection, Particle и Speed (проследите, чтобы метод в PVelocity был Added, а изменялись и скорость, и направление). Паутинку связей усложняем:
- выход перечислителя PPass соединяем с входом Particle (PVelocity)
- выход Momentum со входом Speed (PVelocity).

Вот дошли до теории, которую я сразу не выдал. Прирост скорости ракеты должен происходить в направлении её оси. Но остальные компоненты скорости должны сохраняться. Такую добавку к скорости нам как раз и обеспечит PVelocity в режиме Added. Но вот незадача - направление в PVelocity является вектором, а мы можем оперировать только матрицей частиц (нельзя явно выделить какую-либо ось частицы, как мы это делаем у объектов). Зато матрицу можно разложить на векторы, из которых 3 последних вектора V1, V2 и V3 дают направление осей частицы X, Y и Z соответственно. Что мы и сделаем нодом Matrix2Vtctors. Ось направления будет Z (v3) чтобы это соответствовало направлению испускания газов.



Теперь ракета двигается, шлейф за ней остаётся. Matrix Object в режиме создания частиц позволяет нам управлять частицами вращая и перемещая сам объект. Параметр Folow в атрибутах Matrix Object плавно меняется от 0% (частица полностью самостоятельна) до 100% (частица полностью копирует вращение и движение Matrix Object). Таким образом, вращая Matrix Object мы будем рулить ракетой. Круто да?

Круто, да не совсем. Пока есть суровый недочёт в шлейфе газов, который увидит даже дилетант: шлейф отбрасывается неестественно. Оно и понятно: PStorm, который создаёт его задаёт частицам начальную скорость относительно начала координат, а у реальной ракеты скорость частиц шлейфа относительно наблюдателя складывается из скорости ракеты (v) и относительной скорости истечения газов (u). В момент рождения частицы, когда она уже выйдет из генератора PStorm, можно добавить к её стартовой скорости скорость ракеты тем же PVelocity в режиме Added. Прибавление будет происходить разово, потому что мы ловим частицу не через итератор, а в генераторе.
Создадим ноды PVelocity и Distance. В PVelocity так же надо сделать 3 входа: Particle, Speed и Direction. В ранее созданном PGetData добавим ещё один выход Velocity.
Соединим входы как показано на картинке:



Вот, собственно, и всё. Ракета готова - она будет газовать вперёд, поворачивая так же, как это делает Matrix Object. Тяга двигателя будет задаваться в UserData:Momentum Matrix Object'а. Этакий симулятор космической леталки получился. Ещё пафоса ракете добавит соединение выхода UserData:Momentum c входом Rate у PStorm'а (через multiply хотя бы в 50 раз). Тогда ракета будет дымить тем сильнее, чем больше тяга в двигателе.

Спасибо за внимание.
13.03.2014 22:42
View user's profile Отправить личное сообщение
Никипелоff
Модератор




Зарегистрирован: 30.11.2007
Сообщений: 1251
Страна (Country): Украина
Киев
Версия Cinema4D (Version):от 10,хх - Last
Ответить на тему Ответить с цитатой

Ну что тут сказать! МОЛОТОК!
_________________

16.03.2014 15:54
View user's profile Отправить личное сообщение Visit poster's website
Показать сообщения за последний(-ие):   
Открыть новую тему   Ответить на тему    Форум у C!NEMAXiMUS-a >> Cinema 4D Все даты указаны в GMT + 2 ч.
Страница 1 из 1

 
Перейти к:  
Вы не можете открывать новые темы в этом форуме
Вы не можете отвечать на темы в этом форуме
Вы не можете редактировать Ваши сообщения в этом форуме
Вы не можете удалять Ваши сообщения в этом форуме
Вы не можете учавствовать в опросах на этом форуме




 новости   plugin db   а-чем-а-как   форум   ссылки   о проекте  
Вся ответственность за содержание материалов, опубликованных на сайте, лежит на их авторах.
Использование материалов, опубликованных на сайте, разрешено только со ссылкой на источник.

Copyright © 2003-2010 C!NEMAXiMUS