【发布时间】:2021-03-13 07:04:16
【问题描述】:
假设我有一个 210 毫米 x 297 毫米 (A4) 的页面。它的每边打印边距为 5 毫米。 我想打印 1cm x 1cm 的正方形来填满页面。每个正方形都有一个特定的边距,比如右边 1 毫米,底部 2 毫米。 现在计算我能得到多少平方很容易:
( 210 - 10 ) / ( 10 + 1 ) = 18.181...
( 297 - 10 ) / ( 10 + 2 ) = 23.916...
所以 23 行 18 列的正方形适合我的页面。
现在我希望第一行正方形为 1cm x 1cm,最后一行为 5mm x 5mm。
但是中间的所有行都应该用 5mm 的行填充。大小从上到下递减。
如何找到行数和每行的正方形大小?
我能想到的最好的,但需要尝试一步:
const heightAvailable = 287;
const maxSizeElement = 10;
const minSizeElement = 5;
const marginBottom = 2;
const step = 0.15;
function getElementsArray(availableLeft, minElement, maxElement, margin, step) {
const elementsArray = [];
elementsArray.push(minElement);
elementsArray.push(maxElement);
while(isSizeLeft(availableLeft, minElement, maxElement, margin)) {
minElement+=step;
maxElement-=step;
elementsArray.push(Number((minElement).toFixed(1)));
elementsArray.push(Number((maxElement).toFixed(1)));
availableLeft = getSizeLeft(availableLeft, minElement, maxElement, margin);
}
return elementsArray.sort(function(a,b) { return b - a;});;
}
function isSizeLeft(total, minElement, maxElement, margin) {
return 0 < total - (maxElement+margin) - (minElement+margin);
}
function getSizeLeft(total, minElement, maxElement, margin) {
return total - (maxElement+margin) - (minElement+margin);
}
返回:
array(32) {
[0]=>
int(10)
[1]=>
float(9.9)
[2]=>
float(9.7)
[3]=>
float(9.6)
[4]=>
float(9.4)
[5]=>
float(9.3)
[6]=>
float(9.1)
[7]=>
float(9)
[8]=>
float(8.8)
[9]=>
float(8.7)
[10]=>
float(8.5)
[11]=>
float(8.4)
[12]=>
float(8.2)
[13]=>
float(8.1)
[14]=>
float(7.9)
[15]=>
float(7.8)
[16]=>
float(7.3)
[17]=>
float(7.1)
[18]=>
float(7)
[19]=>
float(6.8)
[20]=>
float(6.7)
[21]=>
float(6.5)
[22]=>
float(6.4)
[23]=>
float(6.2)
[24]=>
float(6.1)
[25]=>
float(5.9)
[26]=>
float(5.8)
[27]=>
float(5.6)
[28]=>
float(5.5)
[29]=>
float(5.3)
[30]=>
float(5.2)
[31]=>
int(5)
}
【问题讨论】:
标签: javascript function math calculation