123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import { Bounds } from "types"
- import * as vec from "./vec"
-
- /**
- * Get whether a point is inside of a bounds.
- * @param A
- * @param b
- * @returns
- */
- export function pointInBounds(A: number[], b: Bounds) {
- return !(A[0] < b.minX || A[0] > b.maxX || A[1] < b.minY || A[1] > b.maxY)
- }
-
- /**
- * Get whether a point is inside of a circle.
- * @param A
- * @param b
- * @returns
- */
- export function pointInCircle(A: number[], C: number[], r: number) {
- return vec.dist(A, C) <= r
- }
-
- /**
- * Get whether a point is inside of an ellipse.
- * @param point
- * @param center
- * @param rx
- * @param ry
- * @param rotation
- * @returns
- */
- export function pointInEllipse(
- A: number[],
- C: number[],
- rx: number,
- ry: number,
- rotation = 0
- ) {
- rotation = rotation || 0
- const cos = Math.cos(rotation)
- const sin = Math.sin(rotation)
- const delta = vec.sub(A, C)
- const tdx = cos * delta[0] + sin * delta[1]
- const tdy = sin * delta[0] - cos * delta[1]
-
- return (tdx * tdx) / (rx * rx) + (tdy * tdy) / (ry * ry) <= 1
- }
|