UNPKG

fabric-texture

Version:

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

89 lines (56 loc) 1.85 kB
[**fabric-texture**](../../../../README.md) *** # Function: isTriangleContainsPoint() > **isTriangleContainsPoint**(`p`, `a`, `b`, `c`, `tolerate`): `boolean` 使用面积法判断点是否在三角形内部或边上 通过比较面积来判断点是否在三角形内部: 1. 计算原始三角形 ABC 的面积 2. 计算点 P 与三角形三个顶点形成的三个小三角形面积之和 3. 如果点在三角形内部,两个面积应该相等(考虑误差) 数学原理: - 如果点在三角形内部,则点与三角形顶点构成的三个小三角形面积之和等于原三角形面积 - 如果点在三角形外部,则三个小三角形面积之和大于原三角形面积 - 如果点在三角形边上,则三个小三角形面积之和等于原三角形面积 ## Parameters ### p `Coord` 待判断的点坐标 ### a `Coord` 三角形顶点A坐标 ### b `Coord` 三角形顶点B坐标 ### c `Coord` 三角形顶点C坐标 ### tolerate `number` = `0.1` 容差值 - 默认值: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 - 使用行列式计算三角形面积 - 考虑了浮点数精度问题 - 边界点也被视为在三角形内 - 三角形顶点的顺序不影响结果