Получить наиболее среднее положение X объектов на пути с Y доступными позициями - PullRequest
1 голос
/ 08 мая 2009

Это пятница, а по местному времени часы - 3,22 вечера, поэтому мой мозг не даст мне решения, поэтому я спрашиваю:

Я пытаюсь написать функцию / алгоритм в Actionscript 3.0, который дает мне самые средние позиции x количества позиций вдоль пути y числа доступных позиций.

Y всегда больше, чем X.

На заднем плане я получил карту, например, с 50 возможными размещениями объектов (вдоль пути). Но у меня есть только 32 объекта для размещения на этом пути, но я хочу, чтобы их размещения были как можно более средними / даже на этом пути. Так что это, например, не будет большой разрыв в конце. Мои доступные позиции в настоящий момент хранятся в массиве с точечными значениями.

Если вы просто сделаете totalPos / wantedPos и ​​напишите об этом, в конце концов, это будет "уродливый" пробел, есть идеи?

EDIT:

Я хотел добавить функцию, если кто-то еще хочет ее:

function place (x : uint, y : uint ) : Array
{
    var a : Array = new Array();
    var s : Number = y / x;
    var c : Number = 0;

    for (var i : Number = 0; i<x; i++) {
        c++;
        var pos : Number = Math.round(i * s);
        a.push(posArray[pos]);
    }
    return a;
}

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

Ответы [ 2 ]

2 голосов
/ 08 мая 2009

Если вы делаете totalPos / wantedPos, вы получите число, которое, вероятно, не в int.

Например, 32/7 = 4,57 ...

Если вы напишете это слово и выберете 4, то в конце вы получите большой разрыв. Однако, если вы накапливаете 4,57 и получаете пол, вы сократите разрыв.

Опять же, например, 32/7 = 4,57 ... Итак, изначально вы выбираете 4. Для следующего числа вы получаете 2 * 4,57 ... = 9,14 ..., поэтому вы выбираете 9. Тогда 3 * 4,57 ... = 13,71, поэтому вы выбираете 13. Etc ...

Вероятно, было бы лучше, если бы вы округлили вместо пола.

Удачи:)

0 голосов
/ 08 мая 2009

Если я правильно понимаю, я думаю, что есть базовый алгоритм для такого рода вещей (но это было слишком давно со школы!). По сути, это рекурсивный вызов, поэтому вы передаете конечные точки, и он помещает объект в среднюю точку. Затем вы выполняете рекурсию с началом до середины в качестве первой конечной точки, а между серединами - как второй. Таким образом, вы продолжаете делить пробелы пополам.

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

...