aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/gesture.ts
blob: 8ffa6d2bbcdfb5cc1e86359cfd6e647c2ebf4357 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import type { PointerCoords } from "./types";

export const getCenter = (pointers: Map<number, PointerCoords>) => {
  const allCoords = Array.from(pointers.values());
  return {
    x: sum(allCoords, (coords) => coords.x) / allCoords.length,
    y: sum(allCoords, (coords) => coords.y) / allCoords.length,
  };
};

export const getDistance = ([a, b]: readonly PointerCoords[]) =>
  Math.hypot(a.x - b.x, a.y - b.y);

const sum = <T>(array: readonly T[], mapper: (item: T) => number): number =>
  array.reduce((acc, item) => acc + mapper(item), 0);