fabric-texture
Version:
This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.
89 lines (56 loc) • 1.85 kB
Markdown
[**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
- 使用行列式计算三角形面积
- 考虑了浮点数精度问题
- 边界点也被视为在三角形内
- 三角形顶点的顺序不影响结果