UNPKG

fabric-texture

Version:

This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.

60 lines (59 loc) 2.17 kB
/** * 使用面积法判断点是否在三角形内部或边上 * * 通过比较面积来判断点是否在三角形内部: * 1. 计算原始三角形 ABC 的面积 * 2. 计算点 P 与三角形三个顶点形成的三个小三角形面积之和 * 3. 如果点在三角形内部,两个面积应该相等(考虑误差) * * 数学原理: * - 如果点在三角形内部,则点与三角形顶点构成的三个小三角形面积之和等于原三角形面积 * - 如果点在三角形外部,则三个小三角形面积之和大于原三角形面积 * - 如果点在三角形边上,则三个小三角形面积之和等于原三角形面积 * * @param p - 待判断的点坐标 * @property {number} x - x坐标 * @property {number} y - y坐标 * @param a - 三角形顶点A坐标 * @property {number} x - x坐标 * @property {number} y - y坐标 * @param b - 三角形顶点B坐标 * @property {number} x - x坐标 * @property {number} y - y坐标 * @param c - 三角形顶点C坐标 * @property {number} x - x坐标 * @property {number} y - y坐标 * @param tolerate - 容差值 * - 默认值:0.1 * - 用于处理浮点数计算的精度误差 * - 增大此值会使判断更宽松 * * @returns {boolean} 点是否在三角形内部或边上 * * @example * ```typescript * // 判断点是否在等边三角形内 * const a = { x: 0, y: 0 }; * const b = { x: 1, y: 0 }; * const c = { x: 0.5, y: 0.866 }; * * // 检查中心点 * const center = { x: 0.5, y: 0.289 }; * console.log(isTriangleContainsPoint(center, a, b, c)); // true * * // 检查外部点 * const outside = { x: 2, y: 2 }; * console.log(isTriangleContainsPoint(outside, a, b, c)); // false * * // 检查边上的点 * const onEdge = { x: 0.5, y: 0 }; * console.log(isTriangleContainsPoint(onEdge, a, b, c)); // true * ``` * * @remarks * - 使用行列式计算三角形面积 * - 考虑了浮点数精度问题 * - 边界点也被视为在三角形内 * - 三角形顶点的顺序不影响结果 */ export declare const isTriangleContainsPoint: (p: Coord, a: Coord, b: Coord, c: Coord, tolerate?: number) => boolean;