Yann
test
f23825d
raw
history blame
1.64 kB
import { IPoint } from "../geometry"
export interface IRect extends IPoint {
width: number
height: number
}
export function containsPoint(rect: IRect, point: IPoint) {
return (
point.x >= rect.x &&
point.x <= rect.x + rect.width &&
point.y >= rect.y &&
point.y <= rect.y + rect.height
)
}
export function right(rect: IRect) {
return rect.x + rect.width
}
export function bottom(rect: IRect) {
return rect.y + rect.height
}
export function intersects(rectA: IRect, rectB: IRect) {
return (
right(rectA) > rectB.x &&
right(rectB) > rectA.x &&
bottom(rectA) > rectB.y &&
bottom(rectB) > rectA.y
)
}
export function containsRect(rectA: IRect, rectB: IRect) {
return containsPoint(rectA, rectB) && containsPoint(rectA, br(rectB))
}
export function br(rect: IRect): IPoint {
return {
x: right(rect),
y: bottom(rect),
}
}
export function fromPoints(pointA: IPoint, pointB: IPoint): IRect {
const x1 = Math.min(pointA.x, pointB.x)
const x2 = Math.max(pointA.x, pointB.x)
const y1 = Math.min(pointA.y, pointB.y)
const y2 = Math.max(pointA.y, pointB.y)
return {
x: x1,
y: y1,
width: x2 - x1,
height: y2 - y1,
}
}
export function scale(rect: IRect, scaleX: number, scaleY: number): IRect {
return {
x: rect.x * scaleX,
y: rect.y * scaleY,
width: rect.width * scaleX,
height: rect.height * scaleY,
}
}
export const zeroRect: IRect = { x: 0, y: 0, width: 0, height: 0 }
export function moveRect(rect: IRect, p: IPoint): IRect {
return {
x: rect.x + p.x,
y: rect.y + p.y,
width: rect.width,
height: rect.height,
}
}