• Процедурная генерация случайного мира из 100 на 100 клеток?

    @alexalexes
    Интуитивно можно действовать так:
    1. Капнуть разными красками в N начальных точках, выбранных случайно.
    2. Выбрать цвет для покраски следующей точки (случайно или последовательно).
    3. Найти точку выбранного цвета, с которой еще не работали (нужно выходить из цикла если отработали все точки).
    3.1. Если непокрашенных соседей нет, то запоминаем, что работали с этой точкой, идем опять на шаг 3 (или на шаг 2, можно случайно выбирать).
    4. Выбрать у этой точки непокрашенного соседа (случайным образом).
    5. Покрасить соседа выбранным цветом.
    6. Запомнить, что работали с точкой, выбранной на шаге 3. Перейти к шагу 2.
    7. Кончились точки с которыми не работали - скорее всего пора выводить результат.
    Ответ написан
    Комментировать
  • C# Как использовать делегирование событий в windows Form? Как поймать событие на родительском элементе?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Переопределяйте очередь сообщений и ловите на здоровье. Но я не понял вашу бизнес задачу. Объясните как идиоту. Вот у вас кнопочка, клик на неё не несёт нагрузки вне ее контекста.
    Ответ написан
    5 комментариев
  • Visual Studio C# не могу запустить helloWorld?

    2chevskii
    @2chevskii
    Если бы каждый мог в поиск, тостер бы вымер.
    powershell: (Get-Process -Id 15008).Kill()
    Ответ написан
    Комментировать
  • Почему не могу смотреть трансляцию на твиче даже в качестве 160?

    Jump
    @Jump
    Системный администратор со стажем.
    Почему не могу смотреть трансляцию на твиче даже в качестве 160?
    Скорости не хватает либо сервер перегружен.

    при том на ютубе спокойно на 1080 hd качестве могу смотреть видео, как так получается вообще не пойму?
    Ну ютуб это совершенно другой ресурс, какая может быть связь?
    Ответ написан
    2 комментария
  • Как рассчитывают освещение и тени 3d движки?

    DenVdmj
    @DenVdmj
    Javascript, Perl, Lua, etc.
    Вначале отбрасывается все, что не попадает в кадр. Как правило, статический мир и все его объекты представлены в виде дерева ограничивающих объемов (каждый из которых разбит на восемь объемов), в таком случае это делается довольно быстро (двоичный поиск, а точнее, в данном случае, восьмеричный). Динамические объекты можно хранить в отдельном, динамически перестраиваемом при перемещении объектов, дереве, либо перестраивать основное дерево (как правило объекты будут перемещаться в соседние узлы, и это довольно быстро).

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

    Но это прямые тени от источника света, кроме них есть еще и глобальное освещение (затенение), SSAO, реализуемое анализом карты глубин текущего кадра (в 2D пространстве кадра, что довольно быстро).

    Более подробно, наверное, можно нагуглить таким образом:
    по первому пункту: octree scene graphs, frustum culling, occlusion culling,
    об освещении: shadow buffers, SSAO.
    Ответ написан
    Комментировать
  • Как рассчитывают освещение и тени 3d движки?

    @rPman
    Метод может быть тем же самым, которым камера определяет видимость объекта, т.е. достаточно запустить тот же самый алгоритм для каждого источника освещения (с учетом ширины луча и направленности, в т.ч. всю сферу), Само собой, есть статические объекты и динамические, в т.ч. сами источники света. Статические вообще рассчитывают на этапе генерации карты, заранее.

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

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

    Оптимизировать можно локально, в т.ч. на этапе дизайна карты, ограничиивая количество источников света, генерирующих тень для объектов в конкретных областях, вас наврятли заинтересуют источники освещения за 100км от объекта, как минимум тень от него может быть упрощенной.
    Ответ написан
    Комментировать
  • С++, как добавлять элементы в hash_map?

    myjcom
    @myjcom Куратор тега C++
    #include <iostream>
    #include <memory>
    #include <unordered_map>
    #include <list>
    
    struct Listener
    {
      std::string _name;
      Listener(std::string name) : _name{ name }{}
      ~Listener() = default;
    };
    
    using Listeners = std::unordered_map<std::string, std::list<Listener>>;
    
    class EventManager
    {
    public:
      EventManager(std::list<std::string>& eventTypes);
      //...
      ~EventManager() = default;
      void print()
      {
        for(const auto& v : *m_listeners)
        {
          std::cout << v.first << " -> ";
          for(const auto& s : v.second)
          {
            std::cout << s._name << ' ';
          }
          std::cout << std::endl;
        }
      }
    private:
      std::unique_ptr<Listeners> m_listeners;
    };
    
    EventManager::EventManager(std::list<std::string>& eventTypes)
                              : m_listeners { std::make_unique<Listeners>() }
    {
      auto insert_it(std::end( *m_listeners ));
      for (const auto &et : eventTypes)
      {
        insert_it = m_listeners->insert( insert_it, {et, {}} );
      }
    }
    
    int main()
    {
      std::list<std::string> events { "Open", "Move", "Close" };
      EventManager eManager{ events };
      eManager.print();
    }

    Еще свою хэш-функцию желательно написать.
    Ответ написан
    5 комментариев
  • Меняется свойства обьекта при вызове console.log(obj)?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    В консоли показывается текущее состояние объекта, а не то, которое было в момент вывода. Но в саммари, которое видно до раскрытия, при этом может быть старая информация.

    Хотите видеть точное состояние неиммутабельных объектов, делайте, например, так: JSON.parse(JSON.stringify(obj))

    Но вообще, отлаживать удобнее и эффективнее через дебаггер, а не сообщения в консоли.
    Ответ написан
    Комментировать
  • Как выглядит алгоритм нахождения пересечения 1000 объектов?

    GavriKos
    @GavriKos
    Вариантов на самом деле немало.

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

    Ну и для проверки пересечений используйте не расстояние, а квадраты расстояний/радиусов - будет быстрее (хоть на сложность алгоритма и не повлияет)
    Ответ написан
    2 комментария
  • C++ почему функция scanf выполняется до функции printf?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Получается что scanf срабатывает быстрее, это вообще как.

    stdout по умолчанию буферизируется построчно, т.е. вывод происходит только когда переполняется внутренний буфер или встречается символ '\n'. Чтобы принудительно вывести всё что накопилось в буфере можно использовать fflush(stdout) после printf:
    printf("Введите ваше имя  ");
    fflush(stdout);
    scanf("%s",name);


    char *name; //=new char[10];
    ...
    scanf("%s",&name);

    Этот код не работает. sscanf сканирует в массив. Должно быть
    char name[10];
    ...
    scanf("%s",name);

    или
    char *name = new char[10];
    ...
    scanf("%s",name);

    но никак не то, что там сейчас написано.
    Ответ написан
    3 комментария
  • Каким образом Youtub отправляет данные о просмотрах, как запарсить их?

    gobananas
    @gobananas
    finishhim.ru
    API же у ютуба есть, там просмотры должен отдавать.
    В исходном коде есть:
    "viewCount":{"videoViewCountRenderer":{"viewCount":{"simpleText":"21 просмотр"},
    Ответ написан
    1 комментарий
  • Простое задание на js, хочу понять что я делаю не так?

    @SimasikS
    Я есть
    Потому что у вас в любом случае вычисляется косинус нужно привести value к числу(он будет строкой по дефолту)
    сделайте так +myform.sincos.value === 1
    Ответ написан
    Комментировать
  • На каком языке писать свой компилятор?

    keydon2
    @keydon2
    ...
    Могу подкинуть неоплачиваемую (разве что символически) несложную задачку - нужно довольно гибко сделать предметно-ориентированный язык для простых структур.
    Да, речь идет о бесплатной рабочей силе, но своей стороны постараюсь как можно четче поставить задачку, посмотреть за коммитами и подсказать что сам знаю. К тому же опыт программирования на заказ(даже бесплатный) отличается от программирования для себя и факт, что твое изделие используется, а не бесполезно лежит в архиве, может греть душу.
    По языку исходников - JS скорее всего не получится, java и плюсы, я думаю допустимы. Идеально будет на perl, python, которые часто и используют для таких задач.
    Напиши, если интересно.
    Ответ написан
    2 комментария
  • Есть ли какая то фоновая служба программа, которая следит за раскладкой клавы?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Можно по другому:
    Панель управления\Часы, язык и регион\Язык\Дополнительные параметры
    5a9ee99daea14757991009.png
    Ответ написан
    Комментировать
  • Как оптимизировать код Jquery?

    freislot
    @freislot
    Frontend-разработчик
    $(document).ready(function() {
      $('.services_check button').click(function(){
        var my = $(this).find('i');
    
        if(my.hasClass('icon-check')){
          my.removeClass('icon-check').addClass('icon-list-add');  
          $(this).prev().val("1");
        }
        else{
          my.addClass('icon-check').removeClass('icon-list-add');   
          $(this).prev().val("0");
        }
    
        $(this).toggleClass('btn-primary').toggleClass('btn-default');
        $(this).blur();
      });
    });
    Ответ написан
    5 комментариев
  • MYSQL не выполняет команды, а просто переводит строчки \C - не помoгает?

    Melkij
    @Melkij
    PostgreSQL DBA
    Судя по поведению, ранее (либо где-то в конфигах) вы заменили delimiter команд.
    use databasename не требует указания delimiter, потому в первый раз сработал.

    Сброс буфера ввода - \c (кроме как внутри кавычек - сначала закрыть кавычки). Либо ctrl+C, но зависит от того как клиент mysql собран.
    Замена разделителя команд - \d новый_разделитель либо delimiter новый_разделитель
    mysql> \d $$
    mysql> use test2
    ERROR 1049 (42000): Unknown database 'test2'
    mysql> show tables;
        -> wtf?
        -> \c
    mysql> \d ;
    mysql> show tables;
    +----------------------------------+
    | Tables_in_test                   |
    +----------------------------------+


    Для выхода из большинства интерактивный текстовых приложений чаще используется ctrl+D, отправляющий EOF.
    Ответ написан
    Комментировать
  • Какой основной принцип отправки пакетов IP на конкретный узел (хост) сети Интернет?

    @yaror
    10 лет в мобильном телекоме
    Я правильно понимаю, что:
    - есть некая Mesh-сеть (все-со-всеми), предназначенная для обмена некими сообщениями
    - канал связи между узлами - прямое TCP-соединение
    - в случае обрыва прямого соединения, должна обеспечиваться возможность транзитного прохождения сообщения
    - количество узлов может быть очень большим - возможно, тысячи узлов

    Верно?

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

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

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

    Пример:
    Узел "Вася" подключается к узлу "Петя".
    В момент подключения, "Вася" сообщает:
    Я "Вася". Я знаю, как добраться до:
    - "Вася", кратчайший путь: ""
    - "Коля", кратчайший путь: "Вася"
    - "Настя", кратчайший путь: "Вася, Коля" (Возможно, есть ещё более длинный маршрут, но нам достаточно сообщить наиболее короткий)

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

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

    Потенциальные грабли, которые стоит учесть:
    1. Не забывать сообщать соседям об изменении своей таблицы маршрутизации:
    - при пропадании соседа
    - при появлении нового соседа
    - если для какого-то возможного получателя изменился наиболее короткий маршрут
    2. Не забывать отбрасывать маршруты, в которых нашёл самого себя
    3. Поскольку из-за некорректной работы некоторых узлов "закольцовывание" всё равно возможно, необходим аналогичный TTL механизм, ограничивающих количество транзитных узлов, которое может пройти сообщение перед своим уничтожением.
    Ответ написан
    5 комментариев
  • Какой основной принцип отправки пакетов IP на конкретный узел (хост) сети Интернет?

    Как устроена сеть
    Куча автономных систем со своей внутренней динамической маршрутизацией между узлами сети. Обычно по протоколу OSPF, может быть IS-IS или даже IBGP. В пределах AS на маршрутизаторах хранится информация о всех маршрутах их стоимости до каждой подсети.

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

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