Модернизация физического движка

В современных играх, в основном, используется «импульсная» модель физического движка. По сути это расчет импульсов и сил действующих на объект с выталкиванием объектов, либо с поиском ближайшей точки до момента контакта и перерасчетом сил. На сегодняшний день создано много физических движков, все работаю с разными погрешностями. Даже в самых основных движках, задача по оптимизации так и не решена. А именно быстрый расчет движения объекта в момент скольжения и столкновения с другими за минимальное число операций. В играх физический движок за одну секунду обычно около 60-200 раз пересчитывает сцену. В итоге результат будет верный, но на его расчет мы потратим значительно больше процессорного времени. Обычно, оптимизируют число проверок столкновения, упрощают модели создавая convex представление и другие оптимизации. Так что же можно применить, чтобы упростить расчеты?

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

Оптимизация 3D моделей на Javascript

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

Нам придется делать это автоматически.

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

Короткие url (mysql + php)

В интернете, множество сайтов, где используются короткие ссылки. Например youtube, tinyurl и подобные. Ссылка вида: http://www.youtube.com/watch?v=N98cpA5hdI0 куда приятнее чем было бы http://www.youtube.com/watch?v=23450928230945820532. Так же использование коротких ссылок необходимо если мы не хотим чтобы наш сайт легко парсили.
Очень часто начинающие программисты пытаются создать ссылки подобного вида на своих сайтах. Но делают это совсем странным способом, обычно создают строку со случайной последовательностью, проверяют есть ли уже подобная в базе данных, если есть создают новую и опять проверяют. Это очень дорогой подход и в базе данных у нас каша из набора символов. Не спорю, это тоже решение, очень даже верное, но не оптимальное. Обычно приходят к такому решению начитавшись форумов, сайтов с ответами или через поиск в том же гугл.
Оптимальное решение: использовать mysql в привычном виде, создать поле id типа int \ bigint, и использовать auto_increment для данного поля. Многие думают, что вдруг индекс будет огромным и выйдет за пределы, это напрасные опасения. Если логика программы верная, просто не получится дойти до границ int/bigint.

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

class BaseConv {
  private static $base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  public static function Base10($value, $b = 62) {
    if (!preg_match("/^[a-zA-Z0-9]+$/", $value)) return -1;
    $limit = strlen($value);
    $result = strpos(static::$base, $value[0]);
    for($i = 1; $i < $limit; $i++) {
      $result = $b * $result + strpos(static::$base, $value[$i]);
    }
    return $result;
  }
  public static function BaseX($value, $b = 62) {
    $r = $value  % $b;
    $result = static::$base[$r];
    $q = floor($value / $b);
    while ($q) {
      $r = $q % $b;
      $q = floor($q / $b);
      $result = static::$base[$r].$result;
    }
    return $result;
  }
}

function idToUrl($id) {
  return BaseConv::BaseX(100000000000 + $id);
}

function idFromUrl($id) {
  return BaseConv::Base10($id)-100000000000;
}

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