18b8f3e38eff5605873b0d5bec81bb41e205b131
问题:加载 Problem_Data.csv(约 27µs 且不固定的采样周期、含 100–277µs 空档),勾选 .UD\SLC_1ms\rtb_BodyIAC_K40+0x2,放大到主时间轴一大格 10ms 时波形大量断开。 根因:该缩放级别下波形走「像素列上下包络」渲染,而包络是按像素列聚合的, 每列只统计「落在本列内的采样点」。本文件的采样间隔(约 27µs)与一个像素列的宽度 (约 60µs)是同量级,因此一次跃变的两个端点常常分别落在相邻两列中:对每一列而言 列内采样点都在同一边,于是这段竖直折线在两侧的包络里都不出现,被整段丢掉, 看上去就是波形断开(与逐点描边渲染对照,1224 列中有 32 列完全没有波形像素)。 修复:在列包络中补上「跨越列边界的两段折线在边界处的取值」。新增 PolylineValueAt() 取折线在列左/右边界处的线性插值并计入该列包络。由于折线在列内是线性的,其极值必然 出现在采样点或列边界上,因此「列内采样点 + 两侧边界取值」就是该列包络的精确解; 相邻两列在公共边界取到同一个值,包络带因而严丝合缝。该处理同时覆盖了「整列没有采样点」 的情况(此时两侧边界取自同一条线段),因此也一并消除了采样稀疏处原有的断口。 验证: - 用临时开关强制走逐点描边路径作为对照基准,按像素列比对覆盖率: 修复前 32 列缺失,修复后 0 列缺失(1224/1224 全覆盖),像素总量与对照基准相当; - 同一区域的 12 倍放大截图显示波形已恢复为连续的方波,与逐点描边结果一致; - 回归 VERY_BIG_DATA.CSV(稠密包络)与 BIG_DATA.csv(稀疏描边 + 包络)渲染正常, make clean && make all 无警告。
Languages
C++
99.5%
Makefile
0.5%