Лучшие программы симулятор физических процессов 3d. Анализируйте, прогнозируйте поведение и оптимизируйте инженерные расчётные проекты с помощью пакета COMSOL Multiphysics ®. Математические и статистические исследования

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

Выдержит ли корпус удар в трех плоскостях? Деформируется при экстремальных температурах? Хорошо ли продумана внутренняя система охлаждения электроники? Ответить на эти вопросы можно двумя способами. Первый: провести испытания готового устройства (прототипа) в реальной жизни и по результатам отправить его на доработку. Второй: провести виртуальное моделирование физических процессов и скорректировать проблемные места на этапе разработки. Это гораздо быстрее и эффективнее, так можно получить рабочие прототипы уже на первой итерации. Давайте рассмотрим оба варианта на реальных проектах…

1. Проверка надёжности крепления корпуса

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

Рис. 1. SOS-устройство в салоне авто (лицевая сторона)

В процессе разработки решено смоделировать столкновение транспортного средства с преградой. Цель - сохранить работоспособность устройства после аварии, и обезопасить пассажиров (ведь они не хотят получить травму из-за того, что устройство выскочило из крепления).

Вот так устройство выглядит с внутренней стороны приборной панели авто:


Рис. 2. Корпус SOS-устройства (внутренняя сторона)

Что же произойдет при столкновении? Используется довольно мощное крепление, посмотрите на защелки. Нужно ли моделировать?

Расчет решено сделать в 2 этапа, чтобы учесть усилие прижима защелок:

  1. Вставка устройства в панель в салоне автомобиля.
  2. Столкновение.
На двух анимированных иллюстрациях ниже показан процесс защелкивания в различных ракурсах. В жизни это будет немного иначе, но при моделировании желательно максимально упростить задачу в разумных пределах. Главное - учесть преднатяг защелки.


Рис 3. Моделирование процесса защелкивания (снаружи)


Рис 4. Моделирование процесса защелкивания (в разрезе)

Из анимации видно, что защелка сначала проходит сквозь деталь. Такую хитрость можно и даже нужно делать при упрощении задачи. В нашем расчете контакт деталей был включен позже.


Рис. 5. Вылет устройства из приборной панели в результате ДТП

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

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

Мы внесли изменения в конструкцию, в результате которых вылет устройства стал значительно меньше за счет подбора новых компонентов на плате. Также было скорректировано крепление нижней части устройства.

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

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

2. Пластиковые корпусы: дефекты отливки

А теперь давайте перейдем к следующему проекту. Ниже представлена фотография элемента пластикового корпуса, который производится серийно.


Рис. 6

А это - результаты моделирования его отливки (с лицевой стороны изделия проблем не видно):


Рис. 7

Скорее всего, вы уже видели подобные дефекты на пластике. В данном случае он расположен только на внутренней стороне, но все же заказчик должен знать об этих дефектах. Вы наверняка заметили, что известные бренды не допускают подобных проблем в своих продуктах.

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

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

Ещё один пример. На рисунке ниже показана анимация заливки изделия. В расчете учитывалась литниковая система, система охлаждения пресс-формы ну и сама пресс-форма:


Рис. 8

Дефект отливки выделен красным цветом:


Рис. 9

Этот дефект чётко виден и на фотографии:


Рис. 10

3. Краш-тесты электроники

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

Мы тоже проводим такие тесты в процессе разработки потребительской электроники. Возьмём в качестве примера шлюз Bluetooth:


Рис. 11

При падении с высоты 1,2 метра устройство должно быть в первозданном состоянии, это было одно из требований заказчика. В техническом задании были отмечены возможные проблемные места, в которых устройство могло сломаться. Мы провели 7 расчетов и получили положительные результаты. На рисунке ниже показан один из результатов расчетов:


Рис. 12

После изготовления прототипов мы ещё раз провели испытания, на этот раз - падение устройства в реальной жизни. Результаты - снова положительные.

Стоит учитывать, что фрезерованные прототипы по физическим характеристикам немного отличаются от серийных корпусов, которые производятся методом отливки - при фрезеровке в изделии остаются остаточные напряжения. Однако и в этом случае лучше произвести испытания.

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


Рис. 13

Вторым этапом стал заказ новых прототипов.

После испытаний на устойчивость к падению устройство, тем не менее, стало ломаться, чего никто не ожидал:


Рис. 14

Такой вот ценный опыт. Хорошо, что корпус еще не был запущен в серийное производство.

Решено провести повторное моделирование и сравнить результаты с практикой. И действительно, программа показала это новое проблемное место:


Рис. 15

Решено убрать отдельные ребра. После очередного моделирования получены положительные результаты.

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

[?!] Вопросы и комментарии приветствуются. На них будет отвечать наш инженер-конструктор Максим Кендысь, эксперт по моделированию изделий из пластмассы и металла в системах инженерного анализа (CAE).

Abinit - пакет прикладных программ, предназначенный для решения задач материаловедения в рамках теории функционала плотности, в частности для нахождения элктронной плотности, расчета полной энергии и свойств материалов.

ANSYS - пакет прикладных программ, предназначенный для инженерных расчетов и моделирования физических явлений, включающих в себя электромагнитные, физические и волновые взаимодействия. Включает в себя графическую среду моделирования.

COMSOL Multiphysics - пакет прикладных программ, предназначенный для инженерных расчетов и моделирования одновременно протекающих физических процессов. Программа имеет доступ к возможностям MATLAB и его расширениям. Пакет COMSOL содержит модули для химических расчетов (Chemical ReactionEngineering Module) и модуль для моделирования теплообмена (Heat Transfer Module), а также графическую среду моделирования.

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

GROMACS - пакет прикладных программ, предназначенный для решения задач молекулярной динамики, и в частности для моделирования белков, липидов и нуклеиновых кислот.

HyperChem - пакет прикладных программ, предназначенный для решения задач молекулярной динамики, механики и квантовой химии. Программа предоставляет графическую среду для моделирования, визуализации и трехмерной анимации изучаемых объектов.

Materials Studio - пакет прикладных программ, предназначенный для моделирования материалов, изучения химических веществ, решения задачи материаловедения и фармацевтики.

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

OpenFOAM - пакет инструментальных средств и библиотек предназначенный для моделирования физических явлений и решения задач вычислительной гидродинамики.

WIEN2k - пакет прикладных программ, предназначенный для решения задач квантовой механики твердых тел, в частности задач теории функционала плотности.

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

Vorpal - набор программ, предназначенный для симуляции и расчета сложных физических процессов динамики плазмы, электрмагнитных систем, разреженных и плотных газов.

Математические и статистические исследования

Maple - пакет прикладных программ, предназначенный для решения задач математики, используя символьные, численные методы, а также визуализацию.

Mathematica - пакет прикладных программ, предназначенный для решения задач различных областей математики (обработки изображений, сигналов и др.), используя символьные, численные методы, а также визуализацию. Включает в себя интерфейс к базе знаний WolframAlpha, может быть использован для публикации математических расчетов в интернете.

MATLAB - пакет прикладных программ, предназначенный для решения задач различных областей математики, каждая из которых реализована в виде расширения. Расширения включают в себя алгоритмы для решения задач оптимизации, статистики, обработки сигналов, а также предоставляют доступ к символьным и параллельным вычисления на видео карте и кластере.

Statistica Advanced - пакет прикладных программ, предназначенный для решения задач статистики, таких как обработка, анализ и визуализация данных, а также для кластеризации, классификации и поиска исследуемых объектов.

Средства разработки и отладки

Intel Parallel Studio XE - пакет разработки распараллеленного программного обеспечения разработанный фирмой Intel, сочетающий в себе ведущие в индустрии C/C++ компилятор и Fortran компилятор, различные библиотеки, инструменты профилирования и многое другое.

Lahey Fortran - компилятор языка Fortran

NAG Fortran Compiler - компилятор языка Fortran

PGI Accelerator Fortran/C/C++ - компилятор языков Fortran/C/C++

Volodya писал(а):

Пытался скачать триальную версию Matlab/Simulink + SimMechanics, но на сайте разработчиков, после заполнения форм, сообщили, что позволят скачать в случае, если у них самих возникнет желание, тогда они сами свяжутся.

Да. Они, как правило, дают скачивать SimMechanics, если у Вас уже имеется лицензия Матлаба...

Если Вы с мех-мата, то очень вероятно, что там имеются студенческие лицензии Матлаба. Дело в том, что Матлаб, беру смелость это заявить, наиболее распространенный и универсальный на сегодняшний день пакет программ прикладной математики, как в академической среде, так и на производстве (например, на нашем заводе). SimMechanics это, так называемый, тулбокс - расширение ядра по определенной тематике. Кроме механики существуют штук 20 тулбоксов, например, обработка сигналов, статистика, оптимизация и тд. Каждый тулбокс снабжен стандартным графическим интерфейсом, позволяющим создавать модель нужной архитектуры, работая мышью. Именно, нужно перетягивать нужные иконки используемых обьектов в рабочеее поле и определять "входы" и "выходы" обьектов. Каждый из тулбоксов может приобретаться опционально, в зависимости от конкретных потребностей.

Справедливости ради, замечу, что SimMechanics - относительно свежий тулбокс (впервые появился года 3 назад), т.е., скорее всего, не обладает такой стабильностью, как, например, Simulink, существующий уже целую "вечность".

Лично я использую Матлаб в 2-х ситуациях. Во-первых, если нужно проверить новый алгоритм или метод, то Матлаб позволяет без лишней суеты программировать в С стиле. Плюс к этому в пакет встроены оптимизированные векторные операции (BLAS), линейная алгебра (LAPACK) и очень продвинутый интерфейс визуализации 2-3D диаграмм. Во-вторых, когда возникает необходимость использовать в нашей программе разнообразные математические функции, то компиллятор (это своего рода тулбокс Matlab Compiler) позволяет скомпилировать файлы программы Матлаб (m-files) в DLLину. Mathworks разрешает 3-м лицам пользоваться такой DLLиной бесплатно (не нужна дополнительная лицензия).

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

Volodya писал(а):

На сайте разработчиков ITI-SIM + SimulationX 2.0 я не нашёл ссылок для скачивания триальной версии.

Я намеренно дал ссылку, т.к. это более дешевая альтернатива ADAMS. Впрочем, если нужно, как было написано вначале, расчитывать соударения тел сложной формы, то не уверен, что ITI-SIM или Матлаб помогут. Сама по себе 3-D модель удара - это целая отдельная сложная наука.

Volodya писал(а):

Например, задан массив частиц, в виде точек в 3-х мерном пространстве, твёрдого тела. Каждая частица обладает массой, вектором скорости. Верно ли, что вектора скоростей всех частиц одного абсолютно твёрдого тела параллельны?

Нет, т.к. тело может вращаться, мгновеннная ось вращения...

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

Для примера возьмём простую задачу Коши.
Дано: и . Найти аппроксимированное решение для .

Рассмотрим задачу с геометрической точки зрения и посмотрим на значение и касательную в точке . Из того, что нам дано, имеем и


Мы пока не знаем как выглядит , но мы знаем что возле точки , значение близко к касательной. Теперь постараемся вычислить для маленького значения , воспользовавшись касательной. Для начала попробуем .


Если расписать, то мы приближаем значение следующим образом:

Так, для .
​​
Теперь мы можем продолжить вычислять для других точек. Хотя, конечно, мы нашли не точное значение , но если наше приближённое значение очень близко к точному, то аппроксимированная касательная тоже будет очень близка к действительной!

$$display$$\begin{aligned}​f(t,y(t))&​=y(t)\\​f(0.5,1.5)​&=1.5​​\end{aligned}$$display$$



Далее, продвинемся ещё на единиц вправо по касательной.


Повторим процесс и получим угловой коэффициент касательной :


Процедуру можно проводить рекурсивно и для этого выведем формулу:

Данный численный метод решения дифференциальных уравнений называется методом Эйлера. Для общего случая шаг x += v * delta_t .

В нашем конкретном случае, пошаговое решение выглядит так:

Используя данный метод, результаты удобно представлять в виде таблицы:

Оказывается, у нашей задачи есть красивое аналитическое решение :


Как вы думаете, что произойдёт, если в методе Эйлера уменьшить шаг?


Разница между аппроксимированным и точным решениями уменьшается с уменьшением ! К тому же, вдобавок к уменьшению шага, можно использовать и другие методы численного интегрирования, которые могут привести к лучшему результату, такие как метод средних прямоугольников , метод Рунге-Кутты и метода Адамса .

Настало время кодить!

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

Т.к. я больше всего знаком с JavaScript, и мне нравится ясность, которую добавляют в код аннотации, все примеры будут написаны на TypeScript .

А начнём мы с версии, в которой подразумевали, что это одномерный массив чисел, прямо как в нашей математической модели.

Function runSimulation(// y(0) = y0 y0: number, // dy/dt(t) = f(t, y(t)) f: (t: number, y: number) => number, // показывает текущее состояние симуляции render: (y: number) => void) { // Шаг вперёд на 1/60 секунды за тик // Если анимация будет 60fps то это приведёт к симуляции в рельном времени const h = 1 / 60.0; function simulationStep(ti: number, yi: T) { render(yi) requestAnimationFrame(function() { const fi = f(ti, yi) // t_{i+1} = t_i + h const tNext = ti + h // y_{i+1} = y_i + h f(t_i, y_i) const yNext = for (let j = 0; j < y.length; j++) { yNext.push(yi[j] + h * fi[j]); } simulationStep(tNext, yNext) } } simulationStep(0, y0) }
Оперировать с одномерными массивами не всегда удобно, можно абстрагировать функции сложения и умножения процесса симуляции в интерфейс и получить краткую обобщённую реализацию симуляции используя TypeScript Generics .

Interface Numeric { plus(other: T): T times(scalar: number): T } function runSimulation>(y0: T, f: (t: number, y: T) => T, render: (y: T) => void) { const h = 1 / 60.0; function simulationStep(ti: number, yi: T) { render(yi) requestAnimationFrame(function() { // t_{i+1} = t_i + h const tNext = ti + h // y_{i+1} = y_i + h f(t_i, y_i) const yNext = yi.plus(f(ti, yi).times(h)) simulationStep(yNext, tNext) }) } simulationStep(y0, 0.0) }
Положительной стороной данного подхода является возможность сконцентрироваться на основе симуляции: что именно эту симуляцию отличает от любой другой. Используем пример симуляции с двумя объектами, упомянутыми выше:

Код симуляция двух объектов

// Состояние симуляции двух объектов в один тик времени class TwoParticles implements Numeric { constructor(readonly x1: Vec2, readonly v1: Vec2, readonly x2: Vec2, readonly v2: Vec2) { } plus(other: TwoParticles) { return new TwoParticles(this.x1.plus(other.x1), this.v1.plus(other.v1), this.x2.plus(other.x2), this.v2.plus(other.v2)); } times(scalar: number) { return new TwoParticles(this.x1.times(scalar), this.v1.times(scalar), this.x2.times(scalar), this.v2.times(scalar)) } } // dy/dt (t) = f(t, y(t)) function f(t: number, y: TwoParticles) { const { x1, v1, x2, v2 } = y; return new TwoParticles(// dx1/dt = v1 v1, // dv1/dt = G*m2*(x2-x1)/|x2-x1|^3 x2.minus(x1).times(G * m2 / Math.pow(x2.minus(x1).length(), 3)), // dx2/dt = v2 v2, // dv2/dt = G*m1*(x1-x1)/|x1-x2|^3 x1.minus(x2).times(G * m1 / Math.pow(x1.minus(x2).length(), 3))) } // y(0) = y0 const y0 = new TwoParticles(/* x1 */ new Vec2(2, 3), /* v1 */ new Vec2(1, 0), /* x2 */ new Vec2(4, 1), /* v2 */ new Vec2(-1, 0)) const canvas = document.createElement("canvas") canvas.width = 400; canvas.height = 400; const ctx = canvas.getContext("2d")!; document.body.appendChild(canvas); // Текущее состояние симуляции function render(y: TwoParticles) { const { x1, x2 } = y; ctx.fillStyle = "white"; ctx.fillRect(0, 0, 400, 400); ctx.fillStyle = "black"; ctx.beginPath(); ctx.ellipse(x1.x*50 + 200, x1.y*50 + 200, 15, 15, 0, 0, 2 * Math.PI); ctx.fill(); ctx.fillStyle = "red"; ctx.beginPath(); ctx.ellipse(x2.x*50 + 200, x2.y*50 + 200, 30, 30, 0, 0, 2 * Math.PI); ctx.fill(); } // Запускаем! runSimulation(y0, f, render)


Если подшаманить с числами, то можно получить симуляцию орбиты Луны!Симуляция орбиты Луны, 1 пикс. = 2500 км. 1 сек. симуляции равна 1 дню на Земле. Пропорция Луны к Земле увеличена в 10 раз

Столкновения и ограничения

Приведённая математическая модель и в самом деле симулирует физический мир, но в некоторых случаях метод численного интегрирования, к сожалению, ломается.

Представьте симуляцию прыгающего на поверхности мячика.

Состояние симуляции можно описать так:

Где это высота мяча над поверхностью, а его скорость. Если отпустить мяч с высоты 0.8 метра, то получим:

Если изобразить график , то получим нечто следующее:


Во время падения мяча производная функции вычисляется достаточно легко:

С ускорением свободного падения, .

Но что произойдёт, когда мяч коснётся поверхности? То, что мяч достиг поверхности мы можем узнать по . Но при численном интегрировании, в один момент времени мяч может находиться над поверхностью, а уже в следующий под ней: .

Можно было бы решить эту задачу путём определения момента столкновения . Но даже если этот момент найти, как определить ускорение так, чтобы оно менялось в противоположную сторону.

Можно, конечно, определить столкновение в ограниченном промежутке времени и применить другую силу на этот отрезок времени , но гораздо легче определить дискретную константу ограничивающую симуляцию.

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

Function runSimulation>(y0: T, f: (t: number, y: T) => T, applyConstraints: (y: T) => T, iterationsPerFrame: number, render: (y: T) => void) { const frameTime = 1 / 60.0 const h = frameTime / iterationsPerFrame function simulationStep(yi: T, ti: number) { render(yi) requestAnimationFrame(function () { for (let i = 0; i < iterationsPerFrame; i++) { yi = yi.plus(f(ti, yi).times(h)) yi = applyConstraints(yi) ti = ti + h } simulationStep(yi, ti) }) } simulationStep(y0, 0.0) }
И теперь уже можно написать код нашего прыгающего мячика:

Код прыгающего мячика

const g = -9.8; // m / s^2 const r = 0.2; // m class Ball implements Numeric { constructor(readonly x: number, readonly v: number) { } plus(other: Ball) { return new Ball(this.x + other.x, this.v + other.v) } times(scalar: number) { return new Ball(this.x * scalar, this.v * scalar) } } function f(t: number, y: Ball) { const { x, v } = y return new Ball(v, g) } function applyConstraints(y: Ball): Ball { const { x, v } = y if (x <= 0 && v < 0) { return new Ball(x, -v) } return y } const y0 = new Ball(/* x */ 0.8, /* v */ 0) function render(y: Ball) { ctx.clearRect(0, 0, 400, 400) ctx.fillStyle = "#EB5757" ctx.beginPath() ctx.ellipse(200, 400 - ((y.x + r) * 300), r * 300, r * 300, 0, 0, 2 * Math.PI) ctx.fill() } runSimulation(y0, f, applyConstraints, 30, render)


Внимание разработчикам!

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

До скорого!

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

На всё изложенное меня вдохновили материалы лекции SIGGRAPH, точно так же как и в симуляции жидкости . Если хотите найти более исчерпывающую информацию о вышеизложенном, то взгляните на материалы курса SIGGRAPH 2001 «Введение в физическое моделирование» . Привожу ссылку на курс 1997 года, т.к. Pixar похоже удалила версию 2001.

Только зарегистрированные пользователи могут участвовать в опросе. , пожалуйста.

Algodoo - программа-конструктор для симуляции/анимации механических движений объектов двухмерного физического мира. Пользователю доступны инструменты для создания объектов любой формы, для задания им физических и кинетических параметров, для управления операциями над объектами как в статике, так и в динамике. С помощью этой программы можно создавать интерактивные уроки по физике, игры, симуляторы механических устройств... и просто с любопытством наблюдать за поведением объектов в зависимости от внешних воздействий. Для продвинутых авторов сцен есть возможность обогатить функционал с помощью скриптов.

Создание объектов

ИНСТРУМЕНТЫ ДЛЯ РИСОВАНИЯ

Sketch Tool - Карандаш - позиционируется как универсальный инструмент для рисования, заменяющий другие. На самом деле, в этом утверждении есть некоторое лукавство, т.к. для каждого типа геометрии лучше выбирать свой наиболее подходящий инструмент, а их несколько. Да, Карандашом можно нарисовать любую линию и любой контур, но будет ли это красиво, например круг? Разработчики предусмотрели для Карандаша рисования прямых линий - с зажатой клавишей Shift . Карандаш всегда рисует замкнутые контур, даже если он не был замкнут пользователем.
Knife - Нож - служит для вырезания участка из другой фигуры. После работы Ножом вырезанный участок сразу не пропадает, надо его выделить и удалить клавишей Del .
Brush - Кисть - работает аналогично Карандашу, но в отличие от Карандаша ей можно регулировать толщину линии. Также в отличие от Карандаша Кисть не рисует замкнутые контуры.
Eraser - Стерка - аналогична Ножу, но имеет регулируемую толщину.
Polygon - Полигоны - большой разница с Карандашом не заметил. Ну еще можно этим инструментом объект выделить, повращать (с зажатой ПКМ), поперетаскивать (с жажатой ЛКМ).
Gear - Шестеренка - рисование зубчатых кругов. Красивые и функциональные фигуры получаются. Можно перед рисование настроить размер зубцов и от этого будет зависеть их количество. Возможны внешние и внутренние шестеренки.
Box - Прямоугольник - рисовние прямоугольников. В этом простом инструменте один параметр Select by incircling , отметка которого позволяет этому инструменту также выделять объекты при обводке нескольких объектов.
Circle - Круг - прост и понятен как голый круг.
Plane - Грань - создание бесконечных полов, стен, потолков с целью, чтобы объекты в раже своей динамики не выезжали, не вылетали и не проваливались в никуда.

ИНСТРУМЕНТЫ ДЛЯ СОЕДИНЕНИЯ И СКРЕПЛЕНИЯ

Chain - Цепь - служит для соединения объектов цепью или веревкой, прочность и размер звеньев которых настраиваются.
Spring - Пружина - после сединения двух объектов пружиной по ПКМ (правая клавиша мыши) на пружине можно вызвать контекстное меню пружины и отрегулировать ее длину, а также параметры жесткости и затухания.
Fixate - Фиксатор - просто сделать объект или объекты под этим маркером неподвижными во время анимации сцены.
Axle - Ось - для скрепления двух объектов осью, на которой объект будет вращаться. Потом эту ось можно преобразовать в моторчик и задать ему направление движения, в том числе с помощью горячих клавиш зрителя.

Создание уникального объекта

Если вы уже наигрались с арсеналом встроенных инструментов рисования объектов, то вам захочется иметь объект с нестандартной геометрией и текстурой. Это возможно и несложно:
- Сначала надо подготовить в графическом редакторе нужную фигуру и сохранить ее в виде PNG файла с прозрачным фоном.
- Затем уже в Algodoo загрузить эту фигуру на сцену:
- - Нарисовать любой замкнутый контур, например, круг;
- - Выделить его и нажать кнопку справа вверху;
- - Нажать кнопку в открывшемся окне настройки интерфейса фигуры;
- - Откроется менеджер файлов (не ахти какой удобный) - в нем надо выбрать на диске нужный PNG файл.
- Этим файлом будет залит наш круг;
- В окне настройки интерфейса фигуры нажать кнопку .
Ву-а-ля, дело сделано. Правда, не до конца и с оговорками, если дело касается фигуры, состоящей из отдельных кусков. В этом случае, во-первых, надо объедить фигуры в группу - с помощью ПКМ вызвать контекстное меню и выбрать Selection > Group . Теперь в статике вы сможете таскать и трансформировать фигуру как единое целое. Но стоит вам запустить анимацию, как фигура упадет и рассыпется на составные куски. Как этого избежать я еще не нашел, т.к. увлекся программой совсем недавно.
Еще одна заметка по текстуре. Её внутри фигуры можно передвигать, вращать, масштабировать - для этого существует специальный инструмент , который хорошо слушается мыши:
- Передвигать - с нажатой ЛКМ;
- Вращать - с нажатой ПКМ.
- Мастабировать - колёсиком мыши.

Сцена и ее анимация

После того, как объекты нарисованы, расставлены по своим местам, снабжены моторчиками, пружинами... осталось нажать на кнопку внизу на панельке управления сценой и всё придет в движение (при правильном планировании). На самом деле для отладки эту кнопку (которую заменяет клавиша [Пробел]) вы будете нажимать постоянно и на ранних этапах. Что еще можно сказать относительно сцены:
- передвигать сцену - нажать кнопку на нижней панельке и с зажатой ЛКМ передвигать;
- изменять масштаб - крутить колесико мыши с зажатой клавишей Crtl или кнопкой на нижней панельке;
- регулировать скорость анимации - при нажатии кнопки над ней появляется слайдер для этого;
- включать/открючать гравитацию - кнопкой на панельке;
- регулировать направление и силу ветра - кнопкой на панельке;
- показывать вспомогательную сетку, которая может быть полезной в статичном положении сцены для более точного позиционирования объектов - для этого используйте кнопку на нижней панельке - одиночный клик включает сетку, а двойной клик показывает окно настройки параметров сетки.
- отменить действия - стандартные кнопки на панельке.

Англо-русский словарик физических терминов

Angle - угол
Area - площадь
Attraction - притяжение (объектов между собой)
Collision - столкновение (в практике программы принадлежность объектов к тем или иным слоям, Collision Layer, влияет на то, какие объекты должны между собой сталкиваться, а какие нет)
Density - плотность
Energy - энергия
Force - сила
Freeze - заморозить
Friction - трение
Gravity - гравитация (притяжение Земли)
Immortal - бессмертный (свойство объекта, благодаря которому его не может убить Killer)
Killer - убийца (свойство объекта, благодаря которому он уничтожает все не Immortal объекты, к которым прикасается)
Liquify - жидкость (любую фигуру можно превратить в жидкость)
Mass - масса
Mirror - зеркало
Momentum - импульс, количество движения
Plot - график изменения во времени тех или иных физических характеристик объекта
Refractive index - коэффициент преломления
Restitution - восстановление (в практике программы это "резиновость", которая влияет на отскок объекта после соударения с препятствием)
Speed - скорость
Spongify - придуманный авторами программы тип объекта, по физическим свойствам схожий с губкой или плюшевой игрушкой
Strength - прочность
Velocity - скорость