如何计算带间距的振幅列在屏幕上的可容纳数量?
我来帮你理清楚这个问题,其实核心就是先算出给定屏幕宽度下能塞下多少个带间距的柱状元素,再基于这个数量去重采样你的振幅数组就行。
一、计算可容纳的元素数量
首先得确定屏幕的可用渲染宽度(记为W)——也就是你用来放柱状图的区域宽度,要去掉侧边的边距之类的,别直接用整个屏幕的原始宽度哦。
接下来推导核心公式:
假设能容纳k个元素,每个元素宽x像素,元素间间距y像素。那么总占用宽度是:k*x + (k-1)*y(因为k个元素之间只有k-1个间距)。这个总宽度必须≤可用宽度W,所以:
k*x + (k-1)*y ≤ W
整理后解出k的最大值:
k ≤ (W + y) / (x + y)
最后对结果向下取整(比如用Math.floor()这类方法),就是你能容纳的最大元素数量了。举个实际例子:如果W=1000,x=5,y=2,那(1000+2)/(5+2)=1002/7≈143.14,取143,总宽度就是143*5 +142*2=715+284=999,刚好小于1000,完美适配屏幕。
二、结合振幅数组的重采样流程
你之前无间距的测试逻辑是对的,现在只需要把“计算可容纳元素数量”的步骤换成上面的带间距公式就行,完整流程是:
- 第一步:获取柱状图区域的可用宽度
W - 第二步:用上面的公式算出最大可容纳元素数
k - 第三步:对原振幅数组进行重采样,把数组长度调整为
k(重采样方法可以选线性插值、最近邻采样等,根据你的精度需求来,比如原数组有1000个元素,要缩到143个,就按比例取点或者插值补全) - 第四步:渲染这
k个重采样后的元素,每个宽x像素,间距y像素,刚好填满屏幕区域
这样处理后,你的振幅柱状图就能完美适配屏幕,不会出现超出边界或者留白过多的情况啦。
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

