intersection
本文回答:求交点统一走
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。
二、最常用
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 个静态方法),命名遵循同样规则。
五、典型用法("求两条线在哪交")
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。
参考(官方文档 MCP)
- 文档:
vjcad/doc/geometry/calculations.md、vjcad/doc/geometry/intersection.md - 示例:
vjcad/example/geometry/04intersection.js、13intersectionadvanced.js