fabric-texture
Version:
This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.
60 lines (59 loc) • 2.17 kB
TypeScript
/**
* 使用面积法判断点是否在三角形内部或边上
*
* 通过比较面积来判断点是否在三角形内部:
* 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;