feat(chart): refine viewport interaction and rendering
This commit is contained in:
@@ -40,10 +40,11 @@ describe('waveform number formatters', () => {
|
||||
expect(formatScientificAxisExponent(0.0001, 0.0003)).toBe('E-04')
|
||||
})
|
||||
|
||||
it('derives the exponent from Math.max(axisMin, axisMax)', () => {
|
||||
it('derives the exponent from the largest absolute endpoint', () => {
|
||||
expect(resolveScientificAxisExponent(-9000, -1000)).toBe(3)
|
||||
expect(resolveScientificAxisExponent(-10_000, 3000)).toBe(3)
|
||||
expect(resolveScientificAxisExponent(-1000, 0)).toBeNull()
|
||||
expect(resolveScientificAxisExponent(-100_000, -3000)).toBe(5)
|
||||
expect(resolveScientificAxisExponent(-10_000, 3000)).toBe(4)
|
||||
expect(resolveScientificAxisExponent(-1000, 0)).toBe(3)
|
||||
expect(resolveScientificAxisExponent(0, 0)).toBeNull()
|
||||
})
|
||||
|
||||
|
||||
@@ -42,8 +42,7 @@ export function shouldUseScientificAxisLabel(maxAbsoluteValue: number): boolean
|
||||
export function resolveScientificAxisExponent(axisMin?: number, axisMax?: number): number | null {
|
||||
if (typeof axisMin !== 'number' || typeof axisMax !== 'number') return null
|
||||
|
||||
const maxValue = Math.max(axisMin, axisMax)
|
||||
const absoluteMaxValue = Math.abs(maxValue)
|
||||
const absoluteMaxValue = Math.max(Math.abs(axisMin), Math.abs(axisMax))
|
||||
return shouldUseScientificAxisLabel(absoluteMaxValue)
|
||||
? Math.floor(Math.log10(absoluteMaxValue))
|
||||
: null
|
||||
|
||||
@@ -37,7 +37,8 @@ export function downsampleLTTB(data: WaveformPoint[], threshold: number): Wavefo
|
||||
|
||||
// 确保阈值至少为 3
|
||||
const sampledLength = Math.max(3, Math.floor(threshold))
|
||||
const sampled: WaveformPoint[] = new Array(sampledLength)
|
||||
const sampled: WaveformPoint[] = []
|
||||
sampled.length = sampledLength
|
||||
|
||||
// 始终保留第一个和最后一个点
|
||||
sampled[0] = data[0]!
|
||||
|
||||
Reference in New Issue
Block a user