• Давайте уберём кватернионы из всех 3D-движков

    • Перевод
    image

    Для записи трёхмерных поворотов программисты графики используют кватернионы. Однако в кватернионах сложно разобраться, потому что изучают их поверхностно. Мы просто принимаем на веру странные таблицы умножения и другие загадочные определения, и используем их как «чёрные ящики», поворачивающие векторы так, как нам нужно. Почему $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ и $\mathbf{i} \mathbf{j} = \mathbf{k}$? Почему мы берём вектор и превращаем его в «мнимый» вектор, чтобы преобразовать его, например $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Да кому это интересно, если всё работает, правда?

    Существует способ описания поворотов под названием ротор, который относится к области и комплексных чисел (в 2D), и кватернионов (в 3D), и даже обобщается до любого количества измерений.

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

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

    Было бы здорово, если бы начали вытеснять использование и изучение кватернионов, заменяя их роторами. Заменить их очень просто, а код останется почти таким же. Всё, что можно делать с кватернионами, например, интерполяцию и устранение блокировки осей (Gimbal lock), можно сделать и с роторами. Но понимать мы начинаем гораздо больше.
    Читать дальше →
  • Волновые процессы в гидравлических линиях. Основы


      Привет, Хабр!

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

      Под катом я покажу “на пальцах” и при помощи гифок основные волновые эффекты. В качестве примера я буду использовать опять гидравлическую линию, но на самом деле в основе лежат практически те же самые уравнения, что и для акустики и электрических линий. Так что, даже если вы не гидравлик, может быть простые аналогии помогут вам разобраться в волновых процессах в целом.
      Осторожно! Под катом 15 Мб анимированных гифок!
      Читать дальше →
    • Стековая машина на моноидах

      • Tutorial

      Не так давно на Хабре появилась отличная и вдохновляющая статья про компиляторы и стековые машины. В ней показывается путь от простой реализации исполнителя байт-кода ко всё более и более эффективным версиям. Мне захотелось показать на примере разработки стековой машины, как это можно сделать Haskell-way.


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


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

      Читать дальше →
    • Концепция голосового интерфейса управления вычислительной системой «DIVA» для помощи людям с нарушениями речи

        image

        Введение


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

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

        Задачи, решаемые в работе:

        1. Провести обзор голосовых интерфейсов и способы их применения для управления вычислительными системами;
        2. Изучить подходы к персонализации голосового управления вычислительной системой;
        3. Разработать математическую модель голосового интерфейса управления вычислительной системой DIVA;
        4. Разработать алгоритм программной реализации DIVA.

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



          Роботы [пока] не научились поведению человека даже в текстовых чатах, хоть и вовсю пытаются. Но ниша для применения искусственного интеллекта давно есть. Машины не умеют красиво вести беседу, зато на основе больших данных уже облегчают жизнь бизнесу, автоматически подбирая конкретный продукт для конкретного клиента. Контакт-центру остается только связаться с последним и с большой (или как минимум бОльшей) вероятностью завершить продажу. Причем — при гораздо меньших предварительных усилиях со стороны людей.

          Мы уже разбирались, что нужно сделать, прежде чем хвататься за работу с моделями, и как собрать толковую команду по оптимизации продаж с помощью big data. Как же теперь соединить продукты бизнеса с клиентами?
          Читать дальше →
        • Как создать надёжную игровую механику, пользуясь только Excel: моделирование и оптимизация решений

          • Перевод
          image

          Мы занимаемся поиском, а не итерациями


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

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

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

          Такие «итерации» совсем непохожи на линейные изменения, которые обычно происходят в «итерациях» компьютерного кода; гораздо больше они напоминают поиск в лабиринте со множеством резких поворотов и вынужденных возвратов назад. Часто они приближают нас к цели, но часто оказывается непонятно, улучшилась ли от них игра. Иногда обнаруживается, что изменения дизайна, которые, по нашему мнению, должны были улучшить игру, имеют непредвиденные изъяны и нам нужно откатить них или попробовать заново.
          Читать дальше →
          • +21
          • 5,3k
          • 6
        • Так устроен поиск заимствований в Антиплагиате

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

            • как быстро найти абзац текста среди сотен миллионов статей;
            • во что превращается документ после загрузки в систему Антиплагиат, и что с этим делать дальше;
            • как формируется отчет, который почти никто не смотрит, а стоило бы;
            • как проиндексировать не все, но достаточно.


            Антиплагиат в естественной среде, полетели
          • Быстрый Sin и Cos на встроенном ASM для Delphi

            Всем привет!

            Возникла потребность написать быстрое вычисление Sin и Cos. За основу для вычислений взял разложение по ряду Тейлора. Использую в 3D-системах (OpenGL и графическая библиотека своей разработки). К сожалению свести ряд «идеально» для Double не получается, но это компенсируется хорошим ускорением. Код написан на встроенном в Delphi XE6 ассемблере. Используется SSE2.

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

            В итоге:

            1. Достигнутая точность результата равна: 10.e-13
            2. Максимальное расхождение с CPU — 0.000000000000045.
            3. Скорость увеличена в сравнении с CPU в 4.75 раза.
            4. Скорость увеличена в сравнении с Math.Sin и Math.Cos в 2.6 раза.

            Для теста использовал процессор Intel Core-i7 6950X Extreme 3.0 ГГц.
            Исходный текст на Delphi встроен в комментарии к ассемблеру.
            Читать дальше →
          • Оптимальное расположение шардов в петабайтном кластере Elasticsearch: линейное программирование

            • Перевод
            В самом сердце информационно-поисковых систем Meltwater и Fairhair.ai работает набор кластеров Elasticsearch с миллиардами статей из СМИ и социальных медиа.

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

            В этой статье мы расскажем, как применили линейное программирование (линейную оптимизацию) для максимально равномерного распределения рабочей нагрузки поиска и индексирования по всем узлам в кластерах. Это решение уменьшает вероятность, что один узел станет узким местом в системе. В результате мы увеличили скорость поиска и сэкономили на инфраструктуре.
            Читать дальше →
            • +27
            • 3,5k
            • 1
          • В трёх статьях о наименьших квадратах: ликбез по теории вероятностей

            • Tutorial
            Полтора года назад я опубликовал статью «Математика на пальцах: методы наименьших квадратов», которая получила весьма приличный отклик, который, в том числе, заключался в том, что я предложил нарисовать сову. Ну, раз сова, значит, нужно объяснять ещё раз. Через неделю ровно на эту тему я начну читать несколько лекций студентам-геологам; пользуюсь случаем, излагаю тут (адаптированные) основные тезисы в качестве черновика. Моей основной целью не является дать готовый рецепт из книги о вкусной и здоровой пищи, но рассказать, почему он таков и что ещё находится в соответствующем разделе, ведь связи между разными разделами математики — это самое интересное!

            На данный момент я предполагаю разбить текст на три статьи:

            • 1. Ликбез по теории вероятностей и как она связана с методами наименьших квадратов
            • 2. Наименьшие квадраты, простейший случай, и как их программировать
            • 3. Нелинейные задачи

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

            Насколько обоснован теорвер или верите ли вы в теорию эволюции?


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


            Читать дальше →

          Самое читаемое