This Wikipedia entry可以幫助;標題爲「粒子系統」的部分就是您所需要的。只要理解你需要爲每個維度進行一次計算,其中顯然有兩個維度。
這裏是一個完整的Scala 2.10程序來生成網格完全隨機整數(使用命令行上指定的尺寸),並找到重心(其中行和列被編號爲從1開始):
object Ctr extends App {
val Array(nRows, nCols) = args map (_.toInt)
val grid = Array.fill(nRows, nCols)(util.Random.nextInt(10))
grid foreach (row => println(row mkString ","))
val sum = grid.map(_.sum).sum
val xCtr = ((for (i <- 0 until nRows; j <- 0 until nCols)
yield (j+1) * grid(i)(j)).sum :Float)/sum
val yCtr = ((for (i <- 0 until nRows; j <- 0 until nCols)
yield (i+1) * grid(i)(j)).sum :Float)/sum
println(s"Center is ($xCtr, $yCtr)")
}
你可以定義一個函數來保持計算DRYer,但我想盡可能保持它的顯着性。無論如何,在這裏我們運行它幾次:
$ scala Ctr 3 3
4,1,9
3,5,1
9,5,0
Center is (1.8378378, 2.0)
$ scala Ctr 6 9
5,1,1,0,0,4,5,4,6
9,1,0,7,2,7,5,6,7
1,2,6,6,1,8,2,4,6
1,3,9,8,2,9,3,6,7
0,7,1,7,6,6,2,6,1
3,9,6,4,3,2,5,7,1
Center is (5.2956524, 3.626087)
您的網格是2D平面嗎? – eLRuLL
我不確定你的意思是「2D飛機」,但我認爲是。它基本上是一個浮點值的二維數組。 – Matthias
正如你所說,這是一個數學問題,也許你應該在http://math.stackexchange.com/上發佈它。 – eLRuLL