Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math n x n正方形中n个对象的排列_Math - Fatal编程技术网

Math n x n正方形中n个对象的排列

Math n x n正方形中n个对象的排列,math,Math,如果有多个对象,如何安排它,使x行列中的每个对象数形成一个近似正方形 exp:14个对象按如下方式排列: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 以平方根为中心 在python中: import math ceil(14**(.5)) 返回: >>> from math import ceil >>> ceil(14**(.5)) 4.0 以平方根为中心 在python中: import math ceil(14**(.5)) 返回:

如果有多个对象,如何安排它,使x行列中的每个对象数形成一个近似正方形

exp:14个对象按如下方式排列:

0 0 0 0
0 0 0 0
0 0 0 0
0 0

以平方根为中心

在python中:

import math
ceil(14**(.5))
返回:

>>> from math import ceil
>>> ceil(14**(.5))
4.0

以平方根为中心

在python中:

import math
ceil(14**(.5))
返回:

>>> from math import ceil
>>> ceil(14**(.5))
4.0

获取项目数的平方根:

n = 14 ^ 0.5 ~ 3.7417
四舍五入到最接近的整数:

n = ceil(14 ^ 0.5) = 4

现在只需将项目按n个项目的行排列,直到用完为止。

获取项目数的平方根:

n = 14 ^ 0.5 ~ 3.7417
四舍五入到最接近的整数:

n = ceil(14 ^ 0.5) = 4

现在,只需将项目按n个项目的行排列,直到用完为止。

给定
n
对象,生成的“正方形”大小为
ceil(sqrt(n))
,具有n=0(不绘制任何内容)或n=1(仅为1x1正方形)的特殊快捷方式


此外,问题的标题有点误导。除非N为1,否则永远不能在NxN正方形中排列N个对象。

给定
N
对象,生成的“正方形”的大小为
ceil(sqrt(N))
,具有N=0(不绘制任何内容)或N=1(仅为1x1正方形)的特殊快捷方式


此外,问题的标题有点误导。除非N是1,否则永远不能在NxN正方形中排列N个对象。

这取决于具体情况。假设列数应等于或大于行数,则以下计算列数(伪代码):


其中
n
是项目的数量。

这取决于。假设列数应等于或大于行数,则以下计算列数(伪代码):


其中
n
是项目数。

如果您希望将网格居中,您必须知道您将提前拥有多少行,此函数(它是javascript,但我认为它应该很容易移植到另一种语言)将生成位置网格,并支持居中和间距

伪码

columns = Ceiling(Sqrt(n))
rows    = (columns - 1) if (Round(Sqrt(n)) < columns) else columns
如果
center
true

+———————+
|       |
|  xxx  |
|  xox  |
|   x   |
|       |
+———————+
代码

/**
*为给定的项目数量和大小创建位置网格。
*它假定项目位于中心。
*
*@param{number}x-网格x位置
*@param{number}y-网格y位置
*@param{number}count-您希望创建的职位数
*@param{number}size-项目大小
*@param{boolean}[center=true]-如果为true,将根据'x','y将网格居中`
*@param{number}[间距=0]-项目间距
*@return{Array.}生成的位置
*/
export const makeGrid=(x,y,count,size,{center=true,space=0}={})=>{
//避免计算琐碎的案例
如果(计数===0)返回[]
if(count==1)返回[{x,y}]
常量sqrt=Math.sqrt(计数)
const columns=Math.ceil(sqrt)
const rows=Math.round(sqrt){
//如果我们在最后一行的第一列,网格居中
if(行===行-1&&column===0&¢er===true){
//如果最后一行的项目没有完全填满该行
//我们将应用一个额外的偏移以使其居中
常量模数=列数%
如果(模数>0){
偏移量X+=(列-模数)*大小和间距*.5
}
}
常数位置={
x:偏移量x+列*大小和间距,
y:偏移量+行*大小和间距,
}
纵队++
如果(列===列){
列=0
划船++
}
返回位置
})
}

如果您希望将网格居中,您必须知道将提前有多少行,此函数(它是javascript,但我认为它应该很容易移植到另一种语言)将生成位置网格,并支持居中和间距

伪码

columns = Ceiling(Sqrt(n))
rows    = (columns - 1) if (Round(Sqrt(n)) < columns) else columns
如果
center
true

+———————+
|       |
|  xxx  |
|  xox  |
|   x   |
|       |
+———————+
代码

/**
*为给定的项目数量和大小创建位置网格。
*它假定项目位于中心。
*
*@param{number}x-网格x位置
*@param{number}y-网格y位置
*@param{number}count-您希望创建的职位数
*@param{number}size-项目大小
*@param{boolean}[center=true]-如果为true,将根据'x','y将网格居中`
*@param{number}[间距=0]-项目间距
*@return{Array.}生成的位置
*/
export const makeGrid=(x,y,count,size,{center=true,space=0}={})=>{
//避免计算琐碎的案例
如果(计数===0)返回[]
if(count==1)返回[{x,y}]
常量sqrt=Math.sqrt(计数)
const columns=Math.ceil(sqrt)
const rows=Math.round(sqrt){
//如果我们在最后一行的第一列,网格居中
if(行===行-1&&column===0&¢er===true){
//如果最后一行的项目没有完全填满该行
//我们对中心应用一个额外的偏移