2011-11-08 74 views
0

我正在使用Actionscript 3,但這是相當普遍的。從給定尺寸和所需數量獲得均勻間隔的X,Y線

我想創建一個簡單的函數,我可以調用,例如GiveCords(寬度,高度,數量)將採用寬度和高度,將其映射出來並使用Num變量將給定量均勻地放置在整個空間中。

說我給它值500,500,1。我希望它返回一個X,250 Y位置,250

但我想它返回給定數組與X點,Y

所以,如果我給它10分,它會爲他們找到所有的最佳位置,是甚至彼此相隔距離。

我猜有對工作的這出一個簡單的公式,但我已經搜查了很多,並沒有發現什麼。

乾杯

回答

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

這是一半了!唯一的問題就是它只給出對角線值,我希望它們在給定的寬度/高度上均勻分佈,例如,左/右/上/下,不只是從左上到右下。 –

+0

@JohnRake這是不可能沒有告訴它你想要每行或每列多少,看看有多個組合... 10它必須是5 x 2或2 x 5它只是方形數字有明顯的答案例如16將是4 x 4.你需要給它一個優先選擇是否你想要更多的對象在一行或一列然後我可以做到這一點。 –

+0

我當然可以告訴它每個行/列有多少個額外的值 - 那太棒了! –