| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { Bounds } from 'types'
- import { pointInBounds } from './hitTests'
- import { intersectPolygonBounds } from './intersections'
-
- /**
- * Get whether two bounds collide.
- * @param a Bounds
- * @param b Bounds
- * @returns
- */
- export function boundsCollide(a: Bounds, b: Bounds): boolean {
- return !(
- a.maxX < b.minX ||
- a.minX > b.maxX ||
- a.maxY < b.minY ||
- a.minY > b.maxY
- )
- }
-
- /**
- * Get whether the bounds of A contain the bounds of B. A perfect match will return true.
- * @param a Bounds
- * @param b Bounds
- * @returns
- */
- export function boundsContain(a: Bounds, b: Bounds): boolean {
- return (
- a.minX < b.minX && a.minY < b.minY && a.maxY > b.maxY && a.maxX > b.maxX
- )
- }
-
- /**
- * Get whether the bounds of A are contained by the bounds of B.
- * @param a Bounds
- * @param b Bounds
- * @returns
- */
- export function boundsContained(a: Bounds, b: Bounds): boolean {
- return boundsContain(b, a)
- }
-
- /**
- * Get whether a set of points are all contained by a bounding box.
- * @returns
- */
- export function boundsContainPolygon(a: Bounds, points: number[][]): boolean {
- return points.every((point) => pointInBounds(point, a))
- }
-
- /**
- * Get whether a polygon collides a bounding box.
- * @param points
- * @param b
- */
- export function boundsCollidePolygon(a: Bounds, points: number[][]): boolean {
- return intersectPolygonBounds(points, a).length > 0
- }
-
- /**
- * Get whether two bounds are identical.
- * @param a Bounds
- * @param b Bounds
- * @returns
- */
- export function boundsAreEqual(a: Bounds, b: Bounds): boolean {
- return !(
- b.maxX !== a.maxX ||
- b.minX !== a.minX ||
- b.maxY !== a.maxY ||
- b.minY !== a.minY
- )
- }
-
- export function getRotatedEllipseBounds(
- x: number,
- y: number,
- rx: number,
- ry: number,
- rotation: number
- ): Bounds {
- const c = Math.cos(rotation)
- const s = Math.sin(rotation)
- const w = Math.hypot(rx * c, ry * s)
- const h = Math.hypot(rx * s, ry * c)
-
- return {
- minX: x + rx - w,
- minY: y + ry - h,
- maxX: x + rx + w,
- maxY: y + ry + h,
- width: w * 2,
- height: h * 2,
- }
- }
|