@antv/layout
Version:
graph layout algorithm
118 lines (114 loc) • 2.46 kB
text/typescript
import type { Point } from '../../types';
/**
* @fileOverview quad
* @author shiwu.wyy@antfin.com
*/
type QuadProps = {
xmid: number;
ymid: number;
length: number;
massCenter?: Point;
mass?: number;
};
export default class Quad {
public xmid: number;
public ymid: number;
public length: number;
public massCenter: Point;
public mass: number;
constructor(params: QuadProps) {
/**
* the center position of this quad
* @type {number}
*/
this.xmid = params.xmid;
/**
* the center position of this quad
* @type {number}
*/
this.ymid = params.ymid;
/**
* the length of this quad
* @type {number}
*/
this.length = params.length;
/**
* the mass center of this quad
* @type {number}
*/
this.massCenter = params.massCenter || [0, 0];
/**
* the mass of this quad
* @type {number}
*/
this.mass = params.mass || 1;
}
getLength() {
return this.length;
}
contains(x: number, y: number) {
const halfLen = this.length / 2;
return (
x <= this.xmid + halfLen &&
x >= this.xmid - halfLen &&
y <= this.ymid + halfLen &&
y >= this.ymid - halfLen
);
}
// northwest quadrant
// tslint:disable-next-line
NW() {
const x = this.xmid - this.length / 4;
const y = this.ymid + this.length / 4;
const len = this.length / 2;
const params: QuadProps = {
xmid: x,
ymid: y,
length: len,
};
const NW = new Quad(params);
return NW;
}
// northeast
// tslint:disable-next-line
NE() {
const x = this.xmid + this.length / 4;
const y = this.ymid + this.length / 4;
const len = this.length / 2;
const params = {
xmid: x,
ymid: y,
length: len,
};
const NE = new Quad(params);
return NE;
}
// southwest
// tslint:disable-next-line
SW() {
const x = this.xmid - this.length / 4;
const y = this.ymid - this.length / 4;
const len = this.length / 2;
const params = {
xmid: x,
ymid: y,
length: len,
};
const SW = new Quad(params);
return SW;
}
// southeast
// tslint:disable-next-line
SE() {
const x = this.xmid + this.length / 4;
const y = this.ymid - this.length / 4;
const len = this.length / 2;
const params = {
xmid: x,
ymid: y,
length: len,
};
const SE = new Quad(params);
return SE;
}
}