#rectangle #algorithm #weight #ratio #aspect #divide #dividing

rust-rectangle-dividing

A rectangle dividing algorithm written in Rust

5 releases

0.1.4 Jul 18, 2024
0.1.3 Nov 10, 2023
0.1.2 Nov 9, 2023
0.1.1 Nov 9, 2023
0.1.0 Nov 9, 2023

#156 in WebAssembly

Download history 5/week @ 2024-07-22 34/week @ 2024-07-29 9/week @ 2024-09-16 1/week @ 2024-09-23 7/week @ 2024-09-30 2/week @ 2024-10-07

214 downloads per month

MIT license

57KB
1.5K SLoC

rust-rectangle-dividing

A library of rectangle dividing written in Rust. It can be compiled to WebAssembly. So you can use it in JavaScript.

Motivation

I want to divide a rectangle into smaller rectangles by given conditions (weights, aspect ratio, etc.).

Mainly, I want to use this for generating a map for my react-playground

Usage in JavaScript

Install

This package is published on NPM @kitsuyui/rectangle-dividing

$ npm install @kitsuyui/rectangle-dividing
# or
$ yarn add @kitsuyui/rectangle-dividing
# or
$ pnpm add @kitsuyui/rectangle-dividing

Example

import { dividing } from "@kitsuyui/rectangle-dividing";

const rect = { x: 0, y: 0, w: 900, h: 800 };
const weights: Float32Array = Float32Array.from([4, 4, 1, 1, 1, 1]);
const aspectRatio = 1.5;
const verticalFirst = true;
const boustrophedron = true;
const divided = dividing(rect, weights, aspectRatio, verticalFirst, boustrophedron);
for (const d of divided) {
  console.log(d);
}

Result

{ x: 0, y: 0, w: 600, h: 400 }
{ x: 0, y: 400, w: 600, h: 400 }
{ x: 600, y: 600, w: 300, h: 200 }
{ x: 600, y: 400, w: 300, h: 200 }
{ x: 600, y: 200, w: 300, h: 200 }
{ x: 600, y: 0, w: 300, h: 200 }

dividing's arguments are

  • rect: The rectangle to be divided
  • weights: The weights of each rectangle
  • isVertical: The direction of the first division
  • aspectRatio: The aspect ratio of each rectangle
  • boustrophedon: The direction of the next division in the same level

License

MIT

Dependencies

~1.2–2.1MB
~39K SLoC