• Как сделать точное вычисление физики гравитации на javascript в canvas методом Верле?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    elleremo, ускорение которое получают планеты пролетая вблизи других планет не является ошибкой!!!

    Этот эффект называется "гравитационный маневр для ускорения объекта" или же "гравитационная праща"

    Swingby_acc_anim.gifГравитационный манёвр для ускорения объекта (гравитационная праща)

    Не стал делать "точную имитацию" гравитации. Пошел по пути:
    1. каждый объект имеет массу равную объему объекта умноженному на плотность объекта
    2. каждый объект влияет на каждый динамический объект
    3. влияние пошагово рассчитывается по формуле (почти) :
    V = сумма(F); // суммарный вектор сил
    F = k*M/D; // сила влияния (расчитывается для каждого объекта оказывающего влияние на текущий)
    M - масса объекта
    D - квадрат расстояния между центрами масс объектов
    k - коэффициент для подгона скоростей (выполняет роль гравитационной постоянной)

    Алгоритм расчета (пошагово):
    1. Для каждого динамического объекта происходит расчет новых координат (сумма текущих координат и вектора скорости, рассчитанного на предыдущей итерации цикла симуляции)
    2. Каждый динамический объект сверяется с каждым объектом на предмет столкновения. Если расстояние между центрами 2х сравниваемых объектов меньше суммы их радиусов то происходит слияние. Если объединяются статичный и динамический объекты, то динамический удаляется а его масса добавляется к статическому с перерасчетом плотности, радиуса и объема. Если объединяются 2 динамических объекта то к первому добавляется масса второго с перерасчетом плотности, радиуса и объема, координаты и вектора скоростей пересчитываются как взвешеная сумма координат и векторов скоростей обоих объектов. После второй объект удаляется.
    3. Для каждого динамического объекта расчитывается сумма векторов силы влияния притяжения всех объектов. Затем данная сумма и вектор скорости текущего объекта суммируются
    4. Переход к новой итерации цикла симуляции.

    Вся реализация расчета тут (в конце скрипта). Все формулы вынесены в класс Calc.

    видеодемонстрация
    демонстрация (масштабируется колесиком мышки, перетаскивается с помощью ЛКМ)

    Добавил слияние планет при столкновении (массы суммируются, вектора скоростей суммируются, позиция переносится в центр масс)
    Добавил источники (автоматически генерируют планеты)
    Добавил отдельные кнопки для пуска и остановки источников

    5bbd21b57da99316097769.png
    Добавил настройки:
    • параметры отображения
      • отображать сетку - вкл/выкл отображение координатной сетки
      • отображать источники - вкл/выкл отображение объектов, генерирующих планеты
      • отображать шлейф - вкл/выкл отображение траектории планет

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



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

    5bbd22bc10be0483291405.png
    Ответ написан
    2 комментария
  • Как соотносится токсичность в IT с другими сферами деятельности?

    Nikolino
    @Nikolino
    Среди представителей стран СНГ, к сожалению, "токсичность" наблюдается во многих областях деятельности: ИТ, маркетинг, музыка (написание/создание музыки), а в компьютерных играх, там, где большая часть это школьники, думаю и рассказывать не стоит.

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

    В медицине, по понятным причинам, врачи более уважительно друг к другу относятся, даже если крайне несогласны друг с другом. Обвинения в некомпетентности редко увидишь, возможно потому, что очень молодых врачей не бывает. Высшее образование + интернатура + хоть пару лет практики и ты уже взрослый/зрелый человек, и юношеского пыла уже не осталось. В медицину с улицы не попасть, дома за компьютером не научиться этому, как "php за 10 часов", оттого и отношение к другим практикующим врачам соответствующее.

    В it порог входа ниже за счет того, что можно почитать пару статей с домашнего компьютера, написать 'Hello world' и ты уже "вайтишник". В итоге после двух-трех недель практики, новички лезут сюда и на форумы, задавать глупые вопросы, которые гуглятся на раз-два. Глупостью это, наверное, называть не правильно, просто "гугление" это тоже навык, который тренируется по мере роста в целом. Так что, "токсичность" на тостере проявляется, в основном, к новичкам. На сложные вопросы так резко не реагируют.

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

    Ну а в компьютерных играх (дотка, CS), вероятно сами знаете как любят "мамку в кино водить", да в микрофон матами кричать как сумасшедшие. А фразы богатого русского, типа "cyka blyat", от представителей нашего геймерского сообщества, уже каждый иностранец знает, этими мемами весь интернет переполнен.
    Ответ написан
    3 комментария
  • Как соотносится токсичность в IT с другими сферами деятельности?

    Мне кажется, это коррелирует с совокупностью личных качеств, черт, таких как:
    закомплекосванность,
    неуверенность в себе,
    слабые коммуникативные навыки,
    низкий уровень базового доверия к миру;
    и связанных с этим факторов и поведенческих особенностей, как то преобладание конкурентных взаимоотношение и т.д.
    В области ИТ, особенно среди программистов, больше закомплексованных интровертов, которым в целом трудно реализовать свою потребность в общении, которая при этом может быть приправлена личными обидами и всем перечисленным выше. Вот Вам и сосредоточие агрессии и токсичности, которые при этом могут быть вполне невинным неумением общаться иначе :) Я с таким сталкивалась :)
    Ответ написан
    4 комментария
  • Что делать после todo?

    toxicmt
    @toxicmt
    CTO at hexlet.io
    Вот сборник тестовых заданий от разных компаний https://github.com/Hexlet/ru-test-assignments
    Ответ написан
    Комментировать
  • Нужно написать cms для базы данных на Nodejs. С чего начать?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    https://www.youtube.com/playlist?list=PLOzk9ZaOL1u...
    Стопудово, она к тому же использует быструю связку
    Ответ написан
    Комментировать
  • Какие минусы в использовании Windows через virtualbox?

    bingo347
    @bingo347
    Crazy on performance...
    Многие графические пакеты от Adobe активно используют видеокарту для вычислений
    из виртуалок более менее адекватно эмулирует видеокарту насколько знаю только VMWare

    Но лучше все таки сделать так:
    1. В качестве хост-ОС поставить гипервизор (например Xen)
    2. Создать в нем 2 виртуалки (под линь и под винду)
    3. настроить, чтоб при старте ПК стратовали обе
    4. разделить между ними оперативу (самому гипервизору хватит 256-512МБ, остальное между виртуалками по нуждам)
    5. на виртуалку с виндой пробросить дескретную видяху
    6. на виртуалку с линем пробросить встройку от i5 (после всех основных настроек гипервизора и открытие ssh сервера в его VNet)
    7. на винде поднимаем VNC сервер и добавляем в автозагрузку
    8. врубаем моник на встройку, виндой управляем через VNC
    Ответ написан
    5 комментариев
  • Как сделать шифрованный канал между 2 приложениями?

    Да, это, разумеется, возможно.
    Сертификат сервера будет проверять ваше клиентское приложение. При этом вы можете задать свою функцию для проверки сертифката через options.checkServerIdentity()
    https://nodejs.org/api/tls.html#tls_tls_checkserve...

    Обычно в таких случаях проверяется не имя и не цепочка доверия, а просто хэш сертификата сервера (fingerprint или fingerprint256 ) и годится совершенно любой самоподписанный сертификат, причем это гораздо безопасней и надежней чем доверие к корневым CA. Такой прием в приложениях обычно называют Certificate pinning.
    Ответ написан
    5 комментариев
  • Separate Compilation on WebPack + TypeScript?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Попробуйте awesome-ts-loader вместо дефолтного ts-loader, он пересобирает только измененные файлы.
    Ответ написан
    4 комментария
  • Как написать такой скрипт?

    MikeKosulin
    @MikeKosulin
    var output = [], n, p;
    for (i=0; i<=9999; i++) {
        p = ('000'+i).slice(-4);
        output.push(p);
    }
    console.log(output);
    Ответ написан
    Комментировать
  • Почему не работает lenght?

    @AFI19
    У вас ошибка в lenght, нужно length
    Ответ написан
    Комментировать
  • Можно ли подключить по hdmi к ноутбуку raspberrypi и в отдельном окне смотреть то что она выводит на hdmi?

    NeiroNx
    @NeiroNx
    Программист
    Можно только с дополнительным оборудованием https://ru.aliexpress.com/item/Mini-Portable-USB2-...
    Ответ написан
    Комментировать
  • Как лучше всего написать парсер javascript-based языка?

    @potan
    Функциональный программист
    Использовать монодические/комбинаторные парсеры. Примеры обычно приводятся на Haskell, но использовать этот паттерн не сложно на почти любом языке - желательно наличие замыканий и сборки мусора, без них можно обойтись, но программировать приходится сложно.
    Ответ написан
    Комментировать
  • Можно ли сделать полноценное мобильное приложение для андроид, используя node js и electron?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Electron только под десктопы — под мобилки Cordova/PhoneGap.

    Так же посмотрите в сторону NativeScript и React Native — производительность и время жизни от батарейки там получше будет, и если это приложение, а не игра, то подходит лучше. P.S. И еще Weex.
    Ответ написан
    Комментировать
  • Как то можно красиво написать if-ы?

    mashletov
    @mashletov
    Math.random()
    if (socket.request.user === undefined) {
        console.error('error'); // или throw
        return;
    }
    
    if (socket.request.user.id === undefined) {
        console.error('error'); // или throw
        return;
    }
    
    // todo
    Ответ написан
    8 комментариев
  • Как реализовать анимацию отмотки круга?

    freislot
    @freislot
    Frontend-разработчик
    набросал небольшой пример может натолкнет вас на правильное решение,
    я предлагаю сделать круг svg и убирать у него бордер постепенно и одновременно сдвигать круг вправо
    вторая анимация это отрисовка линии

    https://codepen.io/freislot/pen/KywqZw
    Ответ написан
    2 комментария
  • На сколько хорошо нужно знать JS, для того что бы перейти к изучению Node js?

    @de1m
    чтобы перейти к изучению Node.js, надо просто перейти к изучению node.js
    Блин любят люди огороды городить, придумываешь проект и понёсся, в непонятных местах (в начале будет много либо всё непонятно) читаешь теорию.
    От всего остального типа асинхронности и типов данных ты никуда не уйдёшь и они придут по ходу выполнения проекта.

    Может быть не очень очевидный пункт для новичка (да и для многих остальных тоже) в ноде можно писать не только что-то для веба, но и просто консольные программы. Я уже для бэкапа кое-что писал и для мониторинга. У нас на фирме node.js стандартный язык для написания всяких скриптов.
    Это я всё к тому, что не надо зацикливаться только на вебе, когда говорят про node.js.
    Ответ написан
    Комментировать
  • Валидация формы. Как реализовать условие, при котором функция не будет выполняться?

    @Stepanya
    1. Читаем https://learn.javascript.ru/regexp-methods
    2. Пишем регулярку
    3. Проверяем значение элемента используя регулярку
    Ответ написан
    Комментировать