唯杰地图 logo唯杰地图
VJMAP
EN

intersection

vjcad/references/geometry/intersection.md 4.5 KB114 行
原文

本文回答:求交点统一走 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