我正在使用Actionscript 3,但这很普遍。
我想制作一个我可以打电话的简单功能,例如GiveCords(宽度,高度,数字)将采用宽度和高度,将其映射并使用Num变量将给定量均匀地放置在空间中。
假设我给它一个500,500,1的值。我希望它能返回250,250的X,Y位置。
但是我希望它能用X,Y返回一个给定点的数组。
所以如果我给它10分,它会找到最佳位置,让它们彼此之间的距离相等。
我猜测有一个简单的公式可以解决这个问题,但我已经搜索了很多但没有找到任何内容。
干杯
答案 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;
}
}