Spaces:
Sleeping
Sleeping
| 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, | |
| } | |
| } | |