Socket
Book a DemoInstallSign in
Socket

linear-octree

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

linear-octree

A sparse, linear octree data structure.

Source
npmnpm
Version
0.1.2
Version published
Weekly downloads
7
-61.11%
Maintainers
1
Weekly downloads
 
Created
Source

Linear Octree

CI Version Peer dependencies

A sparse, linear octree data structure. For a pointer-based implementation see sparse-octree.

Demo · Documentation

Installation

This library requires the peer dependency three.

npm install three linear-octree

Usage

import { KeyDesign, Octree } from "linear-octree";
import { Box3, Vector3 } from "three";

// Define the bit distribution for the X-, Y- and Z-axis.
const keyDesign = new KeyDesign(4, 4, 4); // Tree depth = 4, 2^12 leaf octants

// Define the octree world bounds.
const bounds = new Box3();
bounds.min.set(-1, -1, -1);
bounds.max.set(1, 1, 1);
// Alternatively, define the bounds based on a cell size.
const cellSize = new Vector3(1, 1, 1);
const bounds = keyDesign.calculateBounds(cellSize, new Box3());

// Create the octree.
const octree = new Octree<string>(bounds, keyDesign);

// Octree operations require Uint key coordinates.
const keyCoordinates = new Vector3();
const worldPosition = new Vector3(0.5, 0.5, 0.5);
octree.calculateKeyCoordinates(worldPosition, keyCoordinates);

// Set and retrieve data.
const level = 0; // Octants of every level can store data.
octree.set(keyCoordinates, level, "my data");
octree.get(keyCoordinates, level); // => "my data"
octree.delete(keyCoordinates, level);
octree.get(keyCoordinates, level); // => undefined

Key Design

// The largest uniform octree can contain 2^51 octants.
const keyDesign = new KeyDesign(17, 17, 17);
// Octrees can be non-uniform with uneven bit distributions.
const keyDesign = new KeyDesign(21, 11, 21);
// Bits for Y (and Z) can be set to zero to emulate a quad tree.
const keyDesign = new KeyDesign(26, 0, 26);

Features

  • Linear structure
    • Packs positional data into numeric keys
    • Constant time access to octants, parents and neighbors at any depth level
    • Low memory usage (no explicit positional data stored in octants)
  • Adheres to a common octant layout
  • Supports raycasting
  • Supports culling
  • Can be extended to manage any data

Contributing

Maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

Keywords

partition

FAQs

Package last updated on 30 Sep 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts