从给定尺寸和所需数量获得均匀间隔的X,Y线

时间:2011-11-08 12:45:47

标签: arrays actionscript

我正在使用Actionscript 3,但这很普遍。

我想制作一个我可以打电话的简单功能,例如GiveCords(宽度,高度,数字)将采用宽度和高度,将其映射并使用Num变量将给定量均匀地放置在空间中。

假设我给它一个500,500,1的值。我希望它能返回250,250的X,Y位置。

但是我希望它能用X,Y返回一个给定点的数组。

所以如果我给它10分,它会找到最佳位置,让它们彼此之间的距离相等。

我猜测有一个简单的公式可以解决这个问题,但我已经搜索了很多但没有找到任何内容。

干杯

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这应该做的工作:

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(以考虑最后一个元素末尾的空间)每次增加对象。

编辑:在回复评论时,您可以在其中说明希望对象传播的行数。如果行数没有划分对象数并返回一个整数,那么该函数将返回null。如果你没有给它一个行参数,它假定你想要它跨越一行。享受。

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;
    }
}