> **本文回答**：求交点统一走 `GeometryCalculator.{A}To{B}`，方法名按"实体A → 实体B"的顺序拼写；`Ext` 后缀代表"延伸到无限"（线段延长线 / 完整圆 / 无限射线）；返回 `Point2D[]`，没交点为空数组。

## 一、命名规则

| 后缀 | 含义 |
|---|---|
| `Line` | 线段（有限） |
| `LineExt` | 线段延伸（无限直线） |
| `Arc` | 圆弧（有角度范围） |
| `ArcExt` | 圆弧延伸（完整圆） |
| `Circle` | 圆 |
| `Ray` / `RayExt` | 射线 / 射线延伸 |
| `Xline` | 构造线（双向无限） |
| `Pline` / `PlineExt` | 多段线 / 多段线延伸 |
| `Hatch` | 填充图案 |

MCP 参考：`vjcad/doc/geometry/calculations.md`。

## 二、最常用

```js
import { GeometryCalculator } from 'vjcad';

// 直线 ↔ 直线
GeometryCalculator.LineToLine(line1, line2);          // [Point2D]

// 直线 ↔ 圆
GeometryCalculator.LineToCircle(line, circle);        // 0~2 个点

// 圆 ↔ 圆
GeometryCalculator.CircleToCircle(c1, c2);

// 弧 ↔ 弧
GeometryCalculator.ArcToArc(a1, a2);

// 直线 ↔ 多段线
GeometryCalculator.LineToPline(line, pline);

// 直线 ↔ 填充
GeometryCalculator.LineToHatch(line, hatch);
```

MCP 参考：`vjcad/doc/geometry/calculations.md`、`vjcad/example/geometry/04intersection.js`、`13intersectionadvanced.js`。

## 三、何时用 `Ext`

```
LineToLine        — 两条线段都在自己有限长度内的相交
LineExtToLine     — 第一条延长，第二条不延长
LineToLineExt     — 第一条不延长，第二条延长
LineExtToLineExt  — 两条都延长（即两条无限直线相交，永远只有 0 / 1 个点 / 全重合）
```

实战："看这两条线段所在的直线交点"通常用 `LineExtToLineExt`；"实际相交"用 `LineToLine`。

> `XxxToYyyExt` 的判定是"交点必须落在**非 Ext** 一侧的有限几何上"。例：`LineToLineExt(seg, extLine)` 只当 extLine 的延长线**真跨过 seg** 才返回交点；交点落在 seg 之外返回 `[]`。`ArcToCircle` 受弧的角域过滤（弧扫 [0,π/2] 时只返回角域内的交点），`ArcExtToCircle` 按完整圆算。

MCP 参考：`vjcad/doc/geometry/calculations.md`。

## 四、完整方法表

直线类：

| 方法 | 说明 |
|---|---|
| `LineToLine` / `LineToLineExt` / `LineExtToLine` / `LineExtToLineExt` | 直线 + 直线 |
| `LineToArc` / `LineToArcExt` / `LineExtToArc` / `LineExtToArcExt` | 直线 + 弧 |
| `LineToCircle` / `LineExtToCircle` | 直线 + 圆 |
| `LineToRay` / `LineToRayExt` / `LineExtToRay` / `LineExtToRayExt` | 直线 + 射线 |
| `LineToXline` / `LineExtToXline` | 直线 + 构造线 |
| `LineToPline` / `LineToPlineExt` / `LineExtToPline` / `LineExtToPlineExt` | 直线 + 多段线 |
| `LineToHatch` / `LineExtToHatch` | 直线 + 填充 |

圆弧类：

| 方法 | 说明 |
|---|---|
| `ArcToArc` / `ArcToArcExt` / `ArcExtToArc` / `ArcExtToArcExt` | 弧 + 弧 |
| `ArcToCircle` / `ArcExtToCircle` | 弧 + 圆 |
| `ArcToLine` / `ArcToLineExt` / `ArcExtToLine` / `ArcExtToLineExt` | 弧 + 直线（同上对称） |
| `ArcToRay` / `ArcToRayExt` / `ArcExtToRay` / `ArcExtToRayExt` | 弧 + 射线 |
| `ArcToXline` / `ArcExtToXline` | 弧 + 构造线 |
| `ArcToPline` / `ArcExtToPline` / `ArcToPlineExt` / `ArcExtToPlineExt` | 弧 + 多段线 |

圆 / 射线 / 构造线 / 多段线 / 填充等：

参见 `vjcad/doc/geometry/calculations.md` 完整列表（超过 100 个静态方法），命名遵循同样规则。

## 五、典型用法（"求两条线在哪交"）

```js
const ints = GeometryCalculator.LineExtToLineExt(line1, line2);

if (ints.length === 0) {
  console.log('两线平行或重合');
} else {
  const p = ints[0];
  console.log('交点:', p.x, p.y);
}
```

MCP 参考：`vjcad/doc/geometry/calculations.md`、`vjcad/example/geometry/04intersection.js`、`13intersectionadvanced.js`。

## 反例

- 用 `LineToLine` 求"两条线段所在直线的交点"：线段不相交时返回 `[]`，应用 `LineExtToLineExt`。
- 把弧当圆 `ArcToCircle(arc1, circle)`：你拿到的交点可能不在弧的角度范围内（用 `ArcExtToCircle` 等扩展形式或者后过滤）。
- 多段线 + 多段线性能差：先 `boundingBox()` 粗筛再求交，详见 [break-transform](break-transform.md)。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/geometry/calculations.md`、`vjcad/doc/geometry/intersection.md`
- 示例：`vjcad/example/geometry/04intersection.js`、`13intersectionadvanced.js`
