Получите равномерно распределенные шнуры X, Y от заданного размера и необходимого количества. - PullRequest
0 голосов
/ 08 ноября 2011

Я работаю в ActionScript 3, но это довольно общее правило.

Я хотел бы сделать простую функцию, которую я могу вызвать, например, GiveCords (Width, Height, Num), которая будет приниматьwidth и height, отобразите это и используя переменную Num, поместите заданное количество равномерно по всему пространству.

Скажите, что я даю ему значение 500, 500, 1. Я ожидаю, что оно вернет X,Y позиция 250, 250.

Но я бы хотел, чтобы он возвращал массив заданных точек с X, Y.

Так что, если бы я дал ему 10 баллов, он нашел бы лучшееположение для них всех должно быть на одинаковом расстоянии друг от друга.

Я предполагаю, что есть простая формула для решения этой проблемы, но я искал много и ничего не нашел.

Приветствия

1 Ответ

1 голос
/ 08 ноября 2011

Если я правильно понял, это должно сделать работу:

var object:Object = {width: 500, height:500, num:10};
var points:Array = getCoordinates(object);

function getCoordinates(object:Object):Array {

   var array:Array = new Array();
   var widthMultiplier:Number = object.width / (object.num + 1);
   var heightMultiplier:Number = object.height / (object.num + 1);

   for (a = 1; a <= object.num; a++) {
      var coordinates:Point = new Point();
      coordinates.x = widthMultiplier * a;
      coordinates.y = heightMultipler * a;
      array.push(coordinates);
   }

return array;
}

Требуется количество элементов и общее пространство, делит общее пространство на количество элементов + 1 (для учета пространства в конце последнего элемента) каждый раз увеличивать объекты.

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

var object:Object = {width:500,height:500,num:10};
var points:Array = getCoordinates(object,2);

function getCoordinates(object:Object, rows:int = 1):Array
{
    if ((object.num / rows) % 1)
    {
        return null;
    }
    else
    {
        var columns:int = object.num / rows;

        var array:Array = new Array();
        var widthMultiplier:Number = object.width / (columns + 1);
        var heightMultiplier:Number = object.height / (rows + 1);

        for (var a = 1; a <= rows; a++)
        {
            for (var b = 1; b <= columns; b++)
            {
                var coordinates:Point = new Point();
                coordinates.x = widthMultiplier * b;
                coordinates.y = heightMultiplier * a;
                array.push(coordinates);
            }
        }

        return array;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...