JavaScript для продвинутых пишем симулятор гравитации


Оглавление (нажмите, чтобы открыть):

JavaScript для продвинутых: пишем симулятор гравитации

59 просмотра

1 ответ

41 Репутация автора

Я делаю гравитационный симулятор, чтобы почувствовать физику основанного на кодировании, и я сделал идею здесь. Но у меня есть проблема, после некоторого момента после отскока частица (квадрат) застревает, отскакивая к той же точке. Кто-нибудь знает почему?

Ответы (1)

3 плюса

80332 Репутация автора

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

Вам нужно проверить, находится ли он на земле, и не применять гравитацию, если это:

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

Чтобы сделать отскок более реалистичным, вам нужно ввести «коэффициент реституции», который меньше 1:

Gravity Simulator

Online Gravity Simulator is a sandbox that let you experiment with gravity, planets, star, and asteroids to see how they interact with each other. Give them an initial push and see where it goes. Amazing simulation game that let you visual gravitational attraction in real time.

Why stop there? Go ahead and simulate what we might observe if gravity deviates from a 1/r^2 law. Change the law just a little, and try to recreate the strange and famous behavior of Mercury.

Throughout it all there will be beautiful and captivating pictures. So go make some worlds, and make some art.

As Always, Good Luck and Have Fun.

You might also Like

Best Games

New Games

Gravity Simulator, play online, one of many web based games on KBH Games for you to play online. Gravity Simulator is one of 17596 games you can play now. Gravity Simulator is listed as part of our Asteroid Games, Educational Games, Gravity Games, Physics Games, and Simulation Games categories of games. Gravity Simulator is liked by 38 vistors that played. KBH Games contain a large collection of games you can play on your desktop, mobile, or tablet device. Explore the website and see what great games you’ll discover today. We offer fast servers, easy to use website, and a one-stop place to play the best free online games. We hope that some of the games on the our website can brighten your day just a little bit each day. Make sure to check back, we add new games every day.

Модель гравитации для симулятора

Я проектирую планетарный симулятор системы. Используемые координаты являются стандартными для JPanel (0,0 в верхнем левом углу).

Моя модель основана на классе Body:

Поскольку сила тяжести одинакова для любых двух взаимодействующих тел, я разработал методы для принятия другого тела в качестве аргумента, поэтому мы можем вызвать planet1.interact(planet2)

Наконец, метод, который вычисляет гравитационную силу:

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

Кроме того, я сомневаюсь в этом методе, потому что вызов:

Делает planet2 и planet3 взаимодействует ПОСЛЕ исходной позиции planet1 и planet2 изменилось, и это не так, как это происходит на самом деле. Я не знаю, насколько это важно.

4 ответа

Math.pow (x, 2) -> х * х

Мой любимый мотив — это люди, которые звонят Math.pow() просто для квадрата числа. Мне кажется, что быстрее и проще просто умножить значение само по себе.

Имена переменных теней

В interact() вы используете переменные x и y . Я бы избегал использовать имена переменных, которые изменяют переменные теневого экземпляра. Я бы назвал эти переменные dx и dy вместо этого.

расстояния X и Y

Посмотрите внимательно на свои функции вычисления расстояния x /y:

На самом деле это просто:

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

Разделение взаимодействия и обновление

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

Упрощение функции взаимодействия

Глядя на вашу функцию взаимодействия, есть много мест, которые можно упростить. Во-первых, если вы сохранили знак расстояний x /y, вам не нужны все эти утверждения if. Во-вторых, многие вычисления силы связаны друг с другом и могут быть объединены в меньший набор вычислений. Фактически, когда я переписал вашу функцию, стало так просто:

Дальнейшие упрощения

Если вам действительно не нужна текущая скорость объекта, кроме как обновить позицию (например, для коллизий), вы можете полностью избавиться от ускорения и действовать непосредственно на скорости.

Edit: Кроме того, я думаю, что умножения быстрее, чем деления, поэтому вы также можете инвертировать r3, чтобы вам нужно было только сделать один разрыв. Вы также можете прекомпилировать dx/r^3 и dy/r^3 , чтобы уменьшите количество умножений:

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


Затем вы можете сделать:

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

Просто некоторые заметки о sqrt и pow. Это вычислительно дорого. Используйте их экономно. Помимо того, что другие уже указали, вы также используете расстояние для вычисления силы. Итак, в коде вы идете:

Вы делаете 3 sqrts и 4 pows. Почему бы просто не сделать это:

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

Для сравнений, скажем, простейшая операция занимает 1 единицу времени. Затем операции примерно такие:

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

Я действительно сделал именно это на Java 4 дня. Есть несколько вещей, которые я могу изменить. Простой код, как правило, хороший код; и простой часто (но не исключительно) означает короткий. Причина в том, что часто большая озабоченность, чем вычислительная эффективность, — это читаемость человека, но я уверен, что вы поймете, что я имею в виду здесь.

Прежде всего, я замечаю, что вы возводили квадрат значения, а затем берете корень, чтобы получить его как положительный в методах calculateDist *. Это может работать на поверхности, но помимо введения (очень мягкой) неэффективности он также вводит ошибку с плавающей запятой для каждого вызова. Гораздо проще и безопаснее просто позвонить:

Так как abs () просто корректирует знак. Математически, за исключением ошибки с плавающей запятой, вы правы. Дополнительное уменьшение этих методов может привести нас к:

Если это вас не беспокоит, вы можете просто использовать это:

Это очень зависит от понимания вашей математики и тех, с кем вы работаете.

Операторы if /then были первыми, с которыми мне пришлось пройти. Они могут облегчить жизнь, когда речь идет о кодексах; но они также могут сделать ваш код намного более подробным.

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

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

Может быть уменьшено до:

Конечно, вы также можете вытащить вызовы Math.signum () и сохранить их в переменной фактора; Я бы не стал слишком беспокоиться о избыточных вызовах, потому что один, оптимизатор должен вытащить его для вас в любом случае; и два, это 2015 год, а не назад в день. Однако человеческий элемент мог бы это оценить.

Наконец, до тех пор, пока мы говорим о «хорошем» (и предположительно «этическом») коде, обычная практика среди программистов Java заключается в выборе подробного пути. В пределе вашего класса или проекта может быть ясно, что означают «Ax» и «Ay»; но для более позднего программиста, это выглядит очень ужасно, как печально известный антиспат алфавита-супа. Возможно, было бы лучше суффиктировать методы с помощью «AccelerationX» и «AccelerationY», в правильном верблюжьем корпусе, конечно. То же самое касается скорости. Может показаться, что это не в порядке, чтобы настаивать на вводе всего метода, но если вы используете такую ​​утилиту, как Eclipse или NetBeans (что я вам советую), то автозаполнение все равно будет работать для вас.

Мастер Йода рекомендует:  Как сделать вашу игру привлекательнее для пользователя 6 коротких советов

Последние пункты, которые я могу сделать, чтобы помочь вам в этом. В устной науке есть высказывание — если вам нужно сделать это дважды, сделайте из нее функцию. Во-вторых, физические эмуляции хорошо подходят для Java 8 Stream API; но это много, чтобы подобрать и, по крайней мере, через Java 7 это качественный код. Однако я рекомендую вам изучить учебник по этому вопросу; это значительно упрощает Java-код.

В противном случае, отличная работа!

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

Этот метод возвращает разницу между текущим моментом и некоторой произвольной (но постоянной!) точкой во времени, вроде времени Epoch. Если это будет вызываться повторно, я предлагаю сохранить глобальную переменную под рукой:

и в начале вашего метода вставьте это:

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

Вы также можете объявить время как двойное, но я считаю, что в большинстве случаев просто литье его в одном месте более эффективно. Опять же, настоящая проблема — ваш читатель.

Позже, когда вы имеете дело с краевыми случаями и обнаружением столкновения, это поле поможет.

Создаем симулятор солнечной системы

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

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

Что из этого вышло читайте дальше.

Часть первая. Теоритическая

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

Введем систему координат.

Пускай наша система состоит из двух тел:
1. массивной звезды массой М и центром (x0, y0)
2. легкой планеты массой m, с центром в точке (x, y), скоростью v = (vx, vy) и ускорением a = (ax, ay).

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

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

ax = G * M * (x0-x) / r^3
ay = G * M * (y0-y) / r^3

Это позволяет составить алгоритм перемещения планеты в поле гравитации звезды:

1. Перед началом задаем начальное положение планеты (x, y) и начальную скорость (vx, vy)
2. На каждом шаге вычисляем новое ускорение по формуле выше, после этого пересчитываем скорость и координаты:

vx := vx + T * ax
vy := vy + T * ax

x := x + T * vx
y := y + T * yx

Осталось разобраться с константами G и T. Положим G = 1. Для нашей задачи это не так важно. Параметр T влияет на точность и скорость вычислений. Тоже положим 1 для начала.

Часть вторая. Практическая

Итак, моя первая программа на Питоне. При этом еще раз хочется поблагодарить Velese за практическое руководство.

Так выглядит наша система после некоторого времени симуляции


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

Сейчас я занимаюсь поиском интересных сценариев системы и небольшими улучшениями интерфейса.

Вот пример того, что на данный момент в разработке:

Если эта заметка встретит положительные отзывы, обещаю продолжить рассказ о более новой версии.

1. Я благодарен всем комментаторам за критические замечания. Они дают большую пищу для размышлений.

2. Проект вырос. Все тела уже независимы, влияют друг на труга в соответствии с законом всемирного тяготения.Подсчитывается N^2 взаиможействий.
Сейчас есть возможность хранить конфигурации звездной системы во внешних файлах и выбирать на старте
Код тут
Запускать так: python3.3 main.py -f .ini
Различные конфигурации — там же.

3. Благодаря комментариям удалось найти и устранить главную недоработку — метод вычисления координат.
Сейчас используется метод Рунге-Кутты. По мере прочтения «Нежестких задач» буду осваивть новые методы.

Читают сейчас

Похожие публикации

  • 19 апреля 2014 в 08:32

Строим motion simulator из палок и синей изоленты

Портрет Хабра-tutorial

В Amazon SES появился Mailbox Simulator

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 69

невероятно сложна для аналитического решения уже при n=3

Спасибо. Возможно, я дойду до 3D. Пока это для меня сложно.

Вам мой положительный отзыв: развивайте проект! Вы мне напомнили давнюю мою мечту, о которой я уже давно забыл, а сейчас она возродилась, так что буду следить.

А можно уже новую версию опробовать?

Спасибо за отзыв. Новая версия тут:

Исполняемый файл: main.py
Есть ключ -h
Есть ключ -f для загрузки .ini файла с конфигурацией системы
Есть несколько конфигураций. Пробуйте. Пишите что получилось.
Возможно, что-то криво закоммичено. Пишите, вечером поправлю

Досадно…
Я, как начинающий в Питоне, писал сразу под версию 3.3
Может, в этом проблема?

Теоритически вы можете заменить ConfigParser на что-то из набора Python2.6

Там есть несколько готовых систем.

Не очень понятно – тоже новичёк.
Кстати, чтобы поделится программой с теми кто не имеет Питона и сидит на виндах, можете скомпиливать в exe с помощью py2exe, а лучше с pywin32 (но может это только из–под винды будет работать. )

П.С. Планет уже 2, полная нестабильность, пока одну не вышвырнет из системы… или все разлетаются. Такие пируэты выдают! Как вы и писали, вся фишка в начальных данных, можно поймать очень красивую комбинацию.

Я попробую откомпилировать вечером в.ехе
Да, иногда бывает сложно поймать стабильную комбинацию 🙂 Чем больше планет тоем тоньше грань.

Попробуйте Питон 3.3, если есть возможность.
Все должно запуститься.

Ага. Прочитал, что до 3.3 configparser назывался ConfigParser

The ConfigParser module has been renamed to configparser in Python 3. The 2to3 tool will automatically adapt imports when converting your sources to Python 3

Может, это поможет.

Да, всё отлично работает!

Кстати, в своей версии я выводил ещё текстовую информацию о расстояниях в окно. Возможно, кому-то будет интересно наблюдать как меняются параметры орбиты той планеты, на которую щёлкнули мышью. Также, интересно поэкспериментировать с тяжёлыми планетами, но тогда нужен режим (с возможностью отключить) где звезда не стационарна, а тоже динамична как и планеты. Я уже написал, что в своей версии я запускал планеты с массами близкими к звёздной — красота 🙂

В начальных скоростях вся соль. Все великие столкновения планет или побеги из системы — суть начальных скоростей. Рандомом нельзя…

Насчет логики. Сначала нужно пересчитать ВСЕ ускорения а ТОЛЬКО ПОТОМ — все скорости и координаты.
Нельзя считать одновременно ускорения, скорости и координаты в цикле по объктам, иначе новые значения координат будут влиять на ускорения других объектов.
Об этом будет вторая статья.

Насчет логики. Сначала нужно пересчитать ВСЕ ускорения а ТОЛЬКО ПОТОМ — все скорости и координаты.
Нельзя считать одновременно ускорения, скорости и координаты в цикле по объктам, иначе новые значения координат будут влиять на ускорения других объектов.

Ну вы вот сами запутались.

Законы Ньютона для N тел напрямую дают систему из 3N дифференциальных уравнений второго порядка вида:

Здесь разные x — это какая-то из трёх координат каждого тела, всего 3N координат — итого 3N таких уравнений. x — координаты, x’ — скорости, x» — ускорения (ну, т.е. скорости и ускорения — первые и вторые производные координат)/
Функции в правой части на самом деле не зависят от скоростей и времени, но я просто хотел записать общий случай. Они, собственно говоря, сумма гравитационных взаимодействий, зависят только от координат.

Каждое такое уравнение эквивалентно двум уравнениям первого порядка, а вся система эквивалентна системе из 6N уравнений первого порядка вида (ещё я учёл, что гравитация от скорости и времени не зависит):

(т.е. 3N уравнений первого типа и 3N второго)

здесь x — это координаты, x’ = v — скорости, v’ — ускорения, а в целом если задать ещё начальные условия (3N координат и 3N скоростей), получим типичную задачу Коши.


Если производные в левой части заменить конечными разностями, мгновенно получаем метод Эйлера: x’ = (x-x)/dt, отсюда x = x+dt*f(. ) (6N таких уравнений — по одному для каждого x и v) Значит, теперь можно работать методами Рунге-Кутта и прозводными, Адамса и производными — вам осталось построить явный вид функций правой части.

В любом случае, для явных методов семейства Рунге-Кутта вы будете иметь выражение вида x = R[x, dt, f(. )] (выражение метода Эйлера выше — частный случай). Это выражение будет весьма сложным, зато оно универсальное для любых задач интегрирования (и уже миллион раз реализовано в разных библиотеках). Некоторые методы ещё будут модифицировать шаг и давать помимо очередного значения погрешность.

Что нужно понять из этого комментария.
1. Скорости и координаты с точки зрения математики здесь практически ничем друг от друга не отличаются. То, что уравнений всего 6N — прямое следствие того, что система N тел имеет фазовое пространство размерности 6N, а эти размерности могут быть, например, декартовыми координатами и скоростями.
2. Системы ДУ решаются как одно ДУ, под интегралом и в аргументе правой части задачи Коши которого стоит вектор. Этот вектор — и есть штука, которую вы пытаетесь посчитать.
3. Ну, как положено, считая следующее значение этого вектора, нужно хранить целиком предыдущее значение. Если вспомнить, что вектор имеет вид <3N координат, 3N скоростей>, то вы храните предыдущие координаты и скорости. Хранить и пересчитывать ускорения вообще не нужно — они после дискретизации задачи (перехода к конечным разностям) вообще пропадают из всех формул. (Если строго говорить, их в формулах и не было — только в виде второй производной от координаты или первой от скорости.)

Мой симулятор гравитации застрял

Я создаю гравитационный симулятор, чтобы почувствовать физику основанного на кодировании, и я сделал идею здесь. Но у меня есть проблема, после некоторого момента после отскока частица (квадрат) застревает, отскакивая к той же точке. Кто-нибудь знает почему?

1 ответ

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

Вам нужно проверить, находится ли он на земле, и не применять гравитацию, если это:

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

Чтобы сделать отскок более реалистичным, вам нужно ввести «коэффициент реституции», который меньше 1:

Как сделать мультик в Anime Studio Pro 11 (Moho Pro 12)

Как работать в программе Anime Studio Pro 11 (Moho). Полный обзор с нуля. Создаём вашу первую качественную анимацию!

Скачать персонажей для Anime Studio Pro 10/11 (Moho 12)

Бесплатные готовые настроенные костяные персонажи для вашей анимации в Anime Studio Pro 11 (Moho)

Фоны / Иллюстрации

Скачать бесплатные фоны и иллюстрации в формате Ai для ваших мультфильмов в Moho

Платные ссылки

Обменивайся интересными ссылками на полезные ресурсы в интернете или файлы и получай Лайки на Mult-uroki.ru

Урок 16 — Как сделать игру на javascript. Создаем Раннер. Физика, гравитация, прыжки.

Показать сопутствующие материалы к данному уроку, на которые я ссылался в этом видеоуроке:

По моим видеоурокам вы можете научиться создавать 2d / 3d мультфильмы, персонажей и анимацию в любой стилизации. Начните изучение с первого урока:

Урок длится 41 минуту! За это время вы составите полное мнение обо мне и о программе, и примите дальнейшее решение, которое, возможно, изменит вашу дальнейшую жизнь, (даже если вы не будете потом смотреть мои уроки — сэкономит вам время!). Для себя вы ответите на следующие вопросы:

— Получается ли у меня работать в программе?
— Понятен ли мне процесс прохождения картинки от подготовки в Adobe Photoshop до анимации и готового видеоролика?
— Понравилось ли мое объяснение или я буду искать что-то другое?
— Смогу ли я на этом заработать?
— Смогу ли я сам/сама создать свой мультфильм?, который может послужить, например, отличным подарком!

В этом уроке я рассказываю Как сделать игру Раннер (Runner) на javascript. Используем движок PointJS + PlatformerJS. Подключаем физику, гравитацию, создаем прыжок

Задачник JavaScript и jQuery от Трепачёва Дмитрия

Учебник JavaScript

Практика

Работа с DOM

Практика

Некоторые продвинутые вещи

Рекомендованное ES6

Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.

Регулярки

  • Урок №
    Введение, задач нет
  • Урок №
    Работа с регулярными
    выражениями. Глава 1.
  • Урок №
    Работа с регулярными
    выражениями. Глава 2.
  • Урок №
    Работа с регулярными
    выражениями. Глава 3.
  • Урок №
    Работа с регулярными
    выражениям. Глава 4.
  • Урок №
    Отличия
    от PHP версии

Разное

Работа с канвасом

  • Урок №
    Введение, задач нет

  • Урок №
    Основы
    работы с canvas
  • Урок №
    Продвинутая
    работа с canvas

Практика

  • урок исключен (мало материала), по аяксу скоро будет отдельный учебник (много материала)
    Работа с
    AJAX в JavaScript
    Работа с
    AJAX + PHP

Контекст

  • Урок №
    Введение, задач нет
  • Урок №
    Продвинутая
    работа с контекстом

Drag-and-Drop

  • Урок №
    Введение, задач нет
  • Урок №
    Основы
    работы с ООП
  • Урок №
    Наследование
    классов в JavaScript
    Продвинутая работа
    с классами на JavaScript
  • Урок №
    Применение
    ООП при работе с DOM
  • Урок №
    Практика
    по ООП в JavaScript
  • Тут скоро будут еще уроки
    по функциональному и прототипному
    стилю ООП.

Практика по ООП

Ваша задача: посмотрите, попробуйте повторить.

Практика

Promise ES6

Библиотека jQuery

Тк. jQuery устаревает, объявляю эти уроки не обязательными и выношу в конец учебника (так по уровню уроки середины учебника, если что). В перспективе переедет в отдельный учебник по jq.

Данный раздел сайта содержит задачи по JavaScript+jQuery с начального уровня до продвинутого.

Учебник JavaScript

Практика

Работа с DOM

Практика

Некоторые продвинутые вещи

Рекомендованное ES6

Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.

Регулярки

  • Урок №
    Введение, задач нет
  • Урок №
    Работа с регулярными
    выражениями. Глава 1.
  • Урок №
    Работа с регулярными
    выражениями. Глава 2.
  • Урок №
    Работа с регулярными
    выражениями. Глава 3.
  • Урок №
    Работа с регулярными
    выражениям. Глава 4.
  • Урок №
    Отличия
    от PHP версии

Разное


Работа с канвасом

  • Урок №
    Введение, задач нет
  • Урок №
    Основы
    работы с canvas
  • Урок №
    Продвинутая
    работа с canvas

Практика

  • урок исключен (мало материала), по аяксу скоро будет отдельный учебник (много материала)
    Работа с
    AJAX в JavaScript
    Работа с
    AJAX + PHP

Контекст

  • Урок №
    Введение, задач нет
  • Урок №
    Продвинутая
    работа с контекстом

Drag-and-Drop

  • Урок №
    Введение, задач нет
  • Урок №
    Основы
    работы с ООП
  • Урок №
    Наследование
    классов в JavaScript
    Продвинутая работа
    с классами на JavaScript
  • Урок №
    Применение
    ООП при работе с DOM
  • Урок №
    Практика
    по ООП в JavaScript
  • Тут скоро будут еще уроки
    по функциональному и прототипному
    стилю ООП.

Практика по ООП

Ваша задача: посмотрите, попробуйте повторить.

Практика

Promise ES6

Библиотека jQuery

Тк. jQuery устаревает, объявляю эти уроки не обязательными и выношу в конец учебника (так по уровню уроки середины учебника, если что). В перспективе переедет в отдельный учебник по jq.

Как сделать гравитацию?

27.11.2011, 15:45

Игра на Canvas как реализовать гравитацию и действие(событие) при соприкосновении с объектом
Как реализовать гравитацию и действие(событие) при соприкосновении с объектом. Хочу реализовать.

Задача на гравитацию.
Некоторые планеты (Юпитер, Сатурн, Уран) окружены почти круглыми кольцами, которые сделаны из.

Реализовать гравитацию в игре
Появилась идея создать игру на C# WinForm и появилась первая проблема, я хочу создать гравитацию.

Задача на гравитацию, период обращения.
Было предложено чтобы спутник на круговой орбите поднимался над опеределенным местом земной.

27.11.2011, 16:22 2

Если мышкой берете объект и отпускаете, то вот такой закон изменения координаты y:

27.11.2011, 16:40 [ТС] 3

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

27.11.2011, 16:54 4
27.11.2011, 16:54
28.11.2011, 17:33 5

1. Ускорение у Вас всегда направлено вниз.
2. Горизонтальная составляющая скорости не изменяется, если нет сопротивления воздуха. Соответственно, смещение по оси Х от времени — sx = sx0 + vx*t;
3. Вертикальная составляющая скорости меняется по закону: vy = vy0+a*t, где a — ускорение. Вдоль оси y скорость и ускорение положительны, против — отрицательны. Расстояние меняется по формуле sy=sy0+vy0*t+a*t*t/2.

Этих формул достаточно, чтобы в каждый момент времени вычислить координаты брошенного в гравитационном поле тела.


14.12.2011, 10:10 [ТС] 6

У меня возникла проблема с расчетом скорости.

Как мне засечь координаты х1 и х2 для расчета формулы:
(x2-x1)/t?

Если сделать просто таймер, засекающий каждый период времени координату, то возникает проблема с задержкой таймера (если поставлю 1 мс, то координаты высчитываются слишком близкие и расчеты получаются неверные, а если поставлю 25мс, то координаты расчитываются верно, но возникают проблемы в момент, когда таймер отсчитал период, но не дошел до следующего (26мс)).

Тема: Эмулятор гравитации

Опции темы
  • Опции темы
  • Версия для печати
  • Отправить по электронной почте…

Попросили меня сделать какую нибудь программу про космос, так как этот год-год космонавтики. Сделал Эмулятор гравитации. Программу сдавать 12 февраля. Если найдёте какие-нибудь баги или есть идея для улучшения, то пишите, а то неохота глючную программу сдавать

Пользователь сказал cпасибо:

А если Image поместить в ScrollBox, и увеличивать когда Shape2 будет выходить за него? Или останавливать когда они доходят до конца Image.
Ото когда они долетают до конца начинает мелькать и дальше ничего не рисует .

Спасибо Phreeoni за багрепорт, попробую исправить.

Программа работает — это хорошо .
Имхо стоило бы добавить возможность работы с разным количеством объектов, вроде планет и.т.п. Хотя это конечно усложнит программу. Так же можно сделать, например, чтобы при вводе начальных значений (координаты всякие там и.т.п) результат правки отображался сразу — это удобнее и позволит извлечь из проги большую пользу

Насчёт нескольких планет- я это хотел сделать, но ни времени ни желания почему-то нет, а насчёт того, что значения сразу появляются-я думал, как это сделать, но он кучу всяких ошибок выдаёт, когда поля заполняются, например, очищаем поле для дальнейшего ввода, а он говорит, что «» is not integer value. Вот поэтому и сделал срабатывание по нажатию на энтер.

Надо проверки на пусто делать, или ловить коды ошибок вроде Try Except (Смотря в какой версии Delpi). и все путем будет Ну и так в целом гуд

Попробовал я grav-у. програмка занимательная, однако некоторые мелочи напрягают:
1. Почему значения целые, ну для координат еще приемлемо, в для скоростей уже не хватает точности.
2. Скорости абсолютные, а хорошо бы относительные, да и не линейные а тангенциальные и нормальные, ну или наконец скорость и направление (угол).
3. А размер поля можно увеличить?
4. И последнее, все таки мерцание видно, наверное потому и ограничен размер поля, может использовать DirectX или если не хочется разбиратья использовать две картинки на одной рисовать, в другую в это время показывать, а потом менять местами, правда тогда будут проблемы с траекториями.
А в целом мне очень понравилось, я минут 40 игрался )))!

Я тут немного переделал интерфейс, а то непонятно было, и сделал дробные скорости.

Последний раз редактировалось Dimon012; 11.02.2011 в 11:51 .

JavaScript для продвинутых: пишем симулятор гравитации

Всё самое интересное по программированию. Образовательные статьи, подборки новостей за сутки.

Размещение рекламы, вакансий и анонсов мероприятий: https://tproger.ru/ad/

About
Platform
Made by @FCK_RKN_bot Лучший прокси-бот для Telegram

Как стать программистом, которого хотят нанять — отвечают эксперты

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

Это вообще реально? Чем выделяться среди других программистов и что для этого нужно делать? Спросили об этом у наших экспертов.

«Норма в индустрии при текущем геополитическом климате»

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

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

Хакатон про цифровые гуманитарные решения

С 22 по 24 ноября приходите на хакатон по разработке цифровых решений в гуманитарных науках — DH-Hack: https://tprg.ru/dhhack195

Участие бесплатное, на хакатон ждут студентов и старшеклассников в командах от 3 до 5 человек.

Свои задачи уже дали эксперты из Центра цифровых гуманитарных исследований НИУ ВШЭ. Список партнеров пополняется на сайте хакатона.

Microsoft Japan поэкспериментировал с четырёхдневной рабочей неделей

Страна восходящего солнца известна своим высоким трудоголизмом и малой удовлетворённостью работой. В связи с этим японское отделение Microsoft решило ввести на месяц четырёхдневную рабочую неделю. Рабочие дни при этом не увеличивали.

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

Оплачиваемая стажировка в «Росбанке» — ваш шанс начать карьеру с нуля в направлениях QA и DevOps.

Ищут студентов последних курсов и выпускников 2020-2020 года, готовых работать от 30 часов в неделю. Опыт не обязателен, главное — желание! ��

Плюсом будут хобби-проекты в области программирования и/или системного администрирования, опыт работы с Linux и базовые знания Git.

— Обучение с нуля до профессионала на реальных задачах
— Карьерный рост после успешного прохождения стажировки
— Работу в сильной дружной команде международного банка

Level Up: события и курсы #36

Если вы заскучали этим хмурым ноябрьским утром, вас спешит обрадовать свежая подборка событий для IT-специалистов Level Up #36.

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

Скорее ищите что-нибудь подходящее, ивенты есть почти на каждый день: https://tprg.ru/lvlup36

Что в мире происходит

�� В даркнете появилось объявление о продаже данных 3,5 тыс. клиентов «Альфа-банка» и 3 тыс. — «АльфаСтрахования». Продают ФИО, номера телефонов, адреса регистрации, паспортные данные. «Альфа-банк» признал утечку и заявил, что она коснулась 15 человек: https://tprg.ru/qkKR

�� Госдума приняла в первом чтении законопроект о предустановке на гаджеты российских приложений. По словам авторов, закон нужен, чтобы поддержать российских разработчиков, а ещё чтобы люди не тратили время на поиск информации о том, как устанавливать приложения: https://tprg.ru/i60R

�� На конференции Microsoft Ignite 2020 компания показала универсальное приложение Office, сервисы для создания токенов и гибридных систем: https://tprg.ru/MN5v И наконец вышла веб-версия Visual Studio, плотно завязанная на GitHub: https://tprg.ru/J7Me

Компания Infivention выпустила две новые модели досок Square Off, в которых фигурки движутся сами с помощью магнитов. В чисто шахматных досках Square Off Neo появился ИИ-тренер по имени Виктор, а на новой Square Off Swap, помимо шахмат, можно играть в шашки, нарды и другие игры: https://tprg.ru/9K7x

Большие обзоры новостей, с шуточками и авторской подачей, ловите по будням в канале @tprogerdaily

Новость о высоких технологиях из берлинского суда

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

Почему же это случилось? Судя по всему, это проделки трояна, который кто-то принёс на флешке. Почему же его не отловил антивирус? А потому что в 2020 году компьютеры в берлинском суде всё ещё работали на Windows 95.

Однако если вы подумали, что немцы просто взяли и сдались, то нет. Они достали факсы и печатные машинки и продолжили работать. Шестерёнки бюрократической машины продолжают вертеться, теперь и в буквальном смысле. Возможно, этот вирус был спланированной акцией Microsoft по обновлению клиентов на Windows 10, но доказательств пока нет.

Онлайн-университет Skillbox предлагает программу профессиональной подготовки для начинающих программистов по направлению «Java-разработчик». По завершении обучения вы сможете претендовать на позицию Middle-разработчика.

Почему именно Skillbox:
❶ Обучение через практику;
❷ Программа, дающая актуальные знания и опыт;
❸ С первых занятий решаются бизнес-задачи компаний;
❹ Гибкий график обучения;
❺ Сначала образование, оплата — после.

За 4 месяца вы освоите базовые навыки, с которыми сможете самостоятельно создавать проекты, и начнёте карьеру программиста. Дерзайте, а ребята из Skillbox вам в этом помогут.

Как избежать UX-ошибок в продукте

Как вы относитесь к UX-ошибкам в приложениях? Бесят ли они вас как пользователя? Обращаете ли внимание на UX вашего приложения при разработке?

В этом руководстве читайте про основные UX паттерны и антипаттерны использования в интерфейсах кнопок, переключателей, чекбоксов, диалогов: https://tprg.ru/Fe9y

​​Прямо сейчас в Сколково проходит масштабная конференция по хайлоаду — HighLoad++ 2020. В программе больше 100 докладов и митапов, так что будет просто целая куча интересных выступлений!

Присоединяйтесь и смотрите топовые доклады по высоконагруженным системам и веб-разработке от известных специалистов, не отходя от экрана:
https://tprg.ru/Jozx

Google открыла исходники Cardboard SDK. Это позволит разработчикам создавать VR-приложения, которые будут поддерживать взаимодействие с картонными очками Cardboard.

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

Для разработчиков вышла соответствующая документация к SDK: https://developers.google.com/cardboard/develop

​​7 ноября, в первый день конференции HighLoad++ 2020, состоится вручение Премии HighLoad++ за вклад в развитие экосистемы веб-разработки в России. Её номинанты каждый год делают инфраструктуру интернета комфортнее для миллионов пользователей.

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

Прямая трансляция по сслыке: https://tprg.ru/nmYh

​​Напоминаем, что мы организовали онлайн-трансляцию конференции по хайлоаду — HighLoad++ 2020. Начался второй день конференции, а это значит, что впереди ещё целая куча полезных и уникальных выступлений!

Подключайтесь и прокачивайте знания в live-режиме: https://tprg.ru/Krvc

Голосовой помощник «Горшок»

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

Один из разработчиков «Яндекса» за вечер написал дополнение к голосовому помощнику «Алиса», которое после специальной команды переключает её в режим Горшка. И это дополнение могут попробовать все её обладатели. В режиме Горшка Алиса начинает отвечать фразами из песен «Короля и Шута».

Серверы для программистов

FirstVDS запустил быстрые виртуальные серверы для программистов: процессоры Intel Xeon E-2288G до 5 ГГц, скоростные NVMe-диски, водяное охлаждение. Больше мощности для сложных вычислений и активных фронтенд-проектов — на тарифе CPU.Турбо.

Администрирование, 1 выделенный IPv4-адрес, помощь при переезде с другого хостинга — бесплатно.

Выбрать конфигурацию и получить скидку 30% на 1 месяц по промокоду TPROGER можно по ссылке: https://tprg.ru/93Se

​​Как выжить во время хакатона: подробное руководство

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

Всё это, конечно, очень весело, но очень изнуряюще. Рассказываем, как во время хакатона выжить и при этом успеть насладиться ивентом.

Что в мире происходит

⚖️ Роскомнадзор предложил штрафовать тех, кто покупает и использует украденные персональные данные. Законопроект об этом ещё не готов, в Госдуму его собираются внести во время весенней сессии следующего года: https://tprg.ru/pOId

�� Trend Micro призналась в утечке данных 100 тысяч клиентов. Утекли имена, email-адреса, номера обращений в службу поддержки и в некоторых случаях номера телефонов. Оказалось, один из сотрудников выгрузил базу и продал мошенникам: https://tprg.ru/S1n6

�� OpenAI раскрыла полную версию модели GPT-2. Это генератор текстов, который OpenAI в феврале представила, но отказалась публиковать целиком, опасаясь, что модель будут использовать в дурных целях: https://tprg.ru/moKO

�� «Сбербанк» заявил, что создал самый мощный в России суперкомпьютер. Ему помогала NVIDIA. «Сбербанк» собирается использовать суперкомпьютер в исследованиях, разработке собственных продуктов, а с 12 декабря будет давать его в аренду: https://tprg.ru/0Tcp

�� «Яндекс» представила автономного робота-курьера Яндекс.Ровер. Для его создания использовали наработки по беспилотным автомобилям. Робот умеет распознавать разные виды препятствий и объезжать их, а благодаря лидару может передвигаться даже ночью: https://tprg.ru/o6rJ

Большие обзоры новостей, с шуточками и авторской подачей, ловите по будням в канале @tprogerdaily

​​Стекло для хранения данных

Microsoft разработали стеклянное хранилище данных «Project Silica». И чтобы показать, что оно действительно работает, записали на него фильм. Вместе с компанией Warner Bros. они смогли поместить копию «Супермена» 1978 года на кусочек стекла размерами 75 мм х 75 мм х 2 мм. И затем, что самое главное, смогли получить её обратно.

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

Добавить комментарий