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
threshold
number
screenXScan?
() => (x) => number
gapFree?
boolean
Returns
T[]