Math n x n正方形中n个对象的排列
如果有多个对象,如何安排它,使x行列中的每个对象数形成一个近似正方形 exp:14个对象按如下方式排列: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)) 返回:
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){
//如果最后一行的项目没有完全填满该行
//我们对中心应用一个额外的偏移