fabric-texture
Version:
This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.
81 lines (52 loc) • 1.46 kB
Markdown
[**fabric-texture**](../../../../README.md)
***
# Function: calcIntersection()
> **calcIntersection**(`p1`, `p2`, `p3`, `p4`): `null` \| `Coord`
计算二维平面上两条线段的交点
使用解析几何方法计算两条线段的交点坐标。
处理了以下特殊情况:
1. 平行线段(包括重合)
2. 垂直于坐标轴的线段
3. 考虑浮点数精度问题
## Parameters
### p1
`Coord`
第一条线段的起点
### p2
`Coord`
第一条线段的终点
### p3
`Coord`
第二条线段的起点
### p4
`Coord`
第二条线段的终点
## Returns
`null` \| `Coord`
交点坐标,如果线段平行或重合则返回 null
## Example
```typescript
// 计算两条相交线段的交点
const p1 = { x: 0, y: 0 };
const p2 = { x: 2, y: 2 };
const p3 = { x: 0, y: 2 };
const p4 = { x: 2, y: 0 };
const intersection = calcIntersection(p1, p2, p3, p4);
console.log(intersection); // { x: 1, y: 1 }
// 处理平行线段
const parallel = calcIntersection(
{ x: 0, y: 0 }, { x: 1, y: 1 },
{ x: 0, y: 1 }, { x: 1, y: 2 }
);
console.log(parallel); // null
// 处理垂直线段
const vertical = calcIntersection(
{ x: 1, y: 0 }, { x: 1, y: 2 }, // 垂直线
{ x: 0, y: 1 }, { x: 2, y: 1 } // 水平线
);
console.log(vertical); // { x: 1, y: 1 }
```
## Remarks
- 使用 1e4 的放大因子处理浮点数精度问题
- 使用 0.1**12 作为近似值判断平行阈值
- 返回的坐标可能会有微小的精度误差