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