Skip to content

Documentation / @finchart/core / DecimationStrategy

Interface: DecimationStrategy<T>

Defined in: packages/core/src/data/types.ts:182

Type Parameters

T

T extends BaseDataPoint = BaseDataPoint

Methods

decimate()

decimate(data, range, threshold, screenXScan?, gapFree?): T[]

Defined in: packages/core/src/data/types.ts:209

data 전체가 아니라 [range.start, range.end) 창만 솎는다.

창을 배열이 아니라 구간으로 받는 이유: 호출부가 보이는 구간을 slice로 복사하면 큰 데이터에서 매 프레임 큰 배열을 만들어 일부만 쓰고 버린다. 구간이 필수인 이유: 선택이면 구간을 모르는 전략이 전체를 솎아도 타입이 못 잡는다.

screenXScan은 화면 자리 조회의 판을 여는 공장이다(→ Viewport. screenXScan). x로 버킷을 나누는 전략(M4·LTTB)이 화면과 다른 공간에서 맞으려면 그 공간에서 나눠야 한다. 훑기 한 번마다 한 판을 연다 — 커서가 그 판의 것이라 전략끼리·프레임끼리 간섭할 수 없다. 없으면 x가 곧 화면 자리다(연속 좌표계, 기본).

gapFree는 부르는 쪽이 아는 사실이다 — 참이면 이 데이터에 구멍이 없음이 보장되므로 구멍 경계를 찾는 창 스캔을 건너뛴다. 구멍의 유무는 창이 아니라 배열의 성질이라 뷰포트 캐시로는 못 아끼는 값이라, 변경을 소유한 쪽만 증분으로 유지할 수 있다.

gapless와 합치지는 않는다 — 그쪽은 접근자의 정적 사실이고 이것은 배열의 런타임 상태다.

거짓은 "구멍이 있다"가 아니라 "모른다"를 포함한다 — 안전한 쪽이 거짓이다. 참을 잘못 주면 구멍이 삼켜져 선이 없는 값을 가로질러 이어진다.

Parameters

data

T[]

range

IndexRange

threshold

number

screenXScan?

() => (x) => number

gapFree?

boolean

Returns

T[]