Вниз  Алгоритмизация
- 17.03.2014 / 01:23
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Ксакеп, отлично.
Вот бы ещё алгоритм/исходники 2D гонок с видом сзади. Мне ни разу ни в github, ни в bitbucket не встречались.
__________________
 let live
- 17.03.2014 / 04:38
Oak
  Пользователь

Oak 
Сейчас: Offline
Ксакеп, прочитал, увы, этот алгоритм не сможет выдавать нескучные треки(
__________________
 Эль Презеденте
- 17.03.2014 / 10:37
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Oak, типа зигзагов, резких поворотов на 180 и так далее?
- 17.03.2014 / 13:00
Oak
  Пользователь

Oak 
Сейчас: Offline
Ксакеп, типа серпантинов, многоуровневых треков и тд, да
__________________
 Эль Презеденте
- 20.03.2014 / 08:20
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
aNNiMON, меня вообще удивляет, как это на таких слабых консолях, вроде Денди делали.
__________________
 Чёрные усы кричает этот свисть
- 20.03.2014 / 11:45
Bogdan-G
  Пользователь

Bogdan-G 
Сейчас: Offline
NaruTrey, потому что люди думали головой как заставить игру работать, а сейчас все упростили и уже не нужен мазохизм с оптимизацией, можно хоть шахматы запилить 2гб весом и 4гб оперативки поедающие.
- 20.03.2014 / 11:56
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
Bogdan-G, наверное приходилось придумывать новые алгоритмы на основе математических/геометрических.
__________________
 Чёрные усы кричает этот свисть
- 24.04.2014 / 18:30
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Хороший ресурс с примерами элементов игровой физики на JavaScript. И полезно, и интересно.
http://gamemechanicexplorer.com/
- 6.01.2015 / 03:52
Kalter
  Пользователь

Kalter 
Сейчас: Offline
Никто не пробовал писать алгоритм циклического сдвига массива?

Я опробовал несколько примеров, придумал алгоритм и реализовал его:
  1.     public static void shiftRight(int[] array, int step) {
  2.         final int length = array.length / step;
  3.         for (int i = 0; i < step; i++) {
  4.             for (int j = 0, k = i; j < length; j++) {
  5.                 k += step;
  6.                 if(k >= array.length) {
  7.                     k -= array.length;
  8.                 }
  9.                 swap(array, i, k);
  10.             }
  11.         }
  12.     }
Получилось что-то такое... Работает. Но иногда даёт сбой. Например:
Входной массив: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Выходной массив: [4, 5, 8, 9, 6, 7, 0, 1, 2, 3]

Принцип алгоритма таков:
Мы меняем местами нужные ячейки массива. Начинаем с нулевой ячейки до ячейки step.
1. Выбираем ячейку i и будем её менять со всеми другими ячейками j (так как нам задан шаг step - очевидно, что следующей ячейкой j будет j = i + step, и далее будет возрастать с таким же шагом j += step. Так как сдвиг у нас циклический, то j >= length -> j -= length)
2. Количество таких изменений определяется по формуле: l = length / step с округлением вниз (взял с примеров, всегда работает)
После замены всех ячеек массив сдвигается на step вправо с цикличностью. Пример:
[0, 1, 2, 3, 4] >> 2 = ?
step = 2
l = length / step = 5 / 2 = 2
1. i = 0, j = i + step = 2 | => [0, 1, 2, 3, 4] -> [2, 1, 0, 3, 4]
2. i = 0, j += step = 4 | => [2, 1, 0,3, 4] -> [4, 1, 0, 3, 2]
3. i = 1, j = i + step = 3 | => [4, 1, 0, 3, 2] -> [4, 3, 0, 1, 2]
4. i = 1, j += step = 5, j >= length -> j -= length = 0 | => [4, 3, 0, 1, 2] -> [3, 4, 0, 1, 2]
Получилось... И с другими примерами получалось. И решение выглядит, вроде, логичным. Может кто-то заметил какой-то недочёт или ошибку?
__________________
 Homo homini penis est.
- 6.01.2015 / 11:07
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Kalter, низкая эффективность. Операций swap >N выполнится.
Наверх  Всего сообщений: 127
Фильтровать сообщения
Поиск по теме
Файлы топика (2)