Skip to content
/ ktree Public

🌲 Efficient search structure in k dimensions Quadtree, Octree, ...

Notifications You must be signed in to change notification settings

caub/ktree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8579788 Â· Jul 23, 2018

History

38 Commits
Jul 23, 2018
Apr 15, 2018
May 23, 2018
May 15, 2018
Jul 23, 2018
May 15, 2018
Jul 23, 2018
May 16, 2018
Jul 23, 2018
Jul 23, 2018
May 16, 2018

Repository files navigation

Find efficiently in k-dimensional data

npm version build status coverage status

API

  • new Octree/new Quadtree(array<{[key]}>, <{key?: string = 'coords', transform?: function = x => x, depth?: number = 4}>)
  • add(array<{[key]}>): Add an array of items
  • closest(value): Search for the closest item by key value
  • remove(value): Remove an item from the tree by key value
import colorNames from 'color-names';
import { Octree } from 'ktree'; // colors are 3-dimensional, so use Octree

// simple hex-to-rgb (assuming no short formats, else see https://unpkg.com/color-tf/hexToRgb.js)
const hexToRgb = s => [s.slice(-6, -4), s.slice(-4, -2), s.slice(-2)].map(x => parseInt(x, 16));

const colors = Object.entries(colorNames).map(([hex, name]) => ({ name, hex }));

// Octree constructor needs an array of {[key], ...} objects, where key is configurable
// We'll use 'hex' here, and add a 'transform' property to map those 'hex' values to 3D coordinates
const tree = new Octree(colors, { key: 'hex', transform: hexToRgb });
console.log(tree.closest('5544df')); // { name: 'Majorelle Blue', hex: '#6050dc', d2: 273 }
tree.remove('#6050dc');
console.log(tree.closest('5544df')); // { name: 'Iris', hex: '#5a4fcf', d2: 402 }

About

🌲 Efficient search structure in k dimensions Quadtree, Octree, ...

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published