В моей 2D-игре я использую графические инструменты для создания красивой гладкой местности, представленной черным цветом:
Простой алгоритм, написанный на java, ищет черный цвет каждые 15 пикселей, создавая следующий набор линий (серый):
Как видите, есть места, которые нанесены на карту очень плохо, а есть и очень хорошо. В другом случае не было бы необходимости сэмплировать каждые 15 пикселей, например. если местность ровная.
Каков наилучший способ преобразовать эту кривую в набор точек [линий], используя как можно меньше точек? Выборка каждые 15 пикселей = 55 кадров в секунду, 10 пикселей = 40 кадров в секунду
Следующий алгоритм выполняет эту работу, сэмплируя справа налево, выводя вставляемый код в массив кода:
public void loadMapFile(String path) throws IOException {
File mapFile = new File(path);
image = ImageIO.read(mapFile);
boolean black;
System.out.print("{ ");
int[] lastPoint = {0, 0};
for (int x = image.getWidth()-1; x >= 0; x -= 15) {
for (int y = 0; y < image.getHeight(); y++) {
black = image.getRGB(x, y) == -16777216 ? true : false;
if (black) {
lastPoint[0] = x;
lastPoint[1] = y;
System.out.print("{" + (x) + ", " + (y) + "}, ");
break;
}
}
}
System.out.println("}");
}
Я разрабатываю на Android, используя Java и AndEngine
Sampling every 15 pixels = 55 FPS, 10 pixels = 40 FPS
? Там написаноsampling is inversely proportional to FPS
?. - person SparKot   schedule 09.03.2013