@vuemap/district-cluster
Version:
48 lines (43 loc) • 1.15 kB
text/typescript
interface Point{
x: number,
y: number
}
export default class BoundsItem {
x: number
y: number
width: number
height: number
constructor(x: number, y: number, width: number, height: number) {
this.x = x
this.y = y
this.width = width
this.height = height
}
static getBoundsItemToExpand(): BoundsItem {
return new BoundsItem(Number.MAX_VALUE, Number.MAX_VALUE, -1, -1)
}
static boundsIntersect(b1: BoundsItem, b2: BoundsItem): boolean {
return b1.x <= b2.x + b2.width && b2.x <= b1.x + b1.width && b1.y <= b2.y + b2.height && b2.y <= b1.y + b1.height
}
isEmpty() {
return this.width < 0
}
expandByPoint(x, y) {
let minX, minY, maxX, maxY
if (this.isEmpty()) {
minX = maxX = x
minY = maxY = y
} else {
minX = this.x
minY = this.y
maxX = this.x + this.width
maxY = this.y + this.height
x < minX ? (minX = x) : x > maxX && (maxX = x)
y < minY ? (minY = y) : y > maxY && (maxY = y)
}
this.x = minX
this.y = minY
this.width = maxX - minX
this.height = maxY - minY
}
}