Skip to content

算法Algorithm

内接圆判定

施工中 · 内容逐步修订

In-circle test · Incircle predicate · In-sphere predicate in 2D

用带方向的行列式判定一点位于三点外接圆内、圆上还是圆外。

形式陈述 ​

固定实平面上的标准 Euclidean 内积,圆按相应平方距离定义。给定平面点

a=(ax,ay), b=(bx,by), c=(cx,cy), d=(dx,dy),

定义

InCircle(a,b,c,d)=det⁡(axayax2+ay21bxbybx2+by21cxcycx2+cy21dxdydx2+dy21).

若 a,b,c 逆时针且不共线,则:

  • 行列式 >0:d 在三点外接圆内;
  • 行列式 =0:四点共圆;
  • 行列式 <0:d 在圆外。

若 a,b,c 共线或有重合点,三点不确定唯一外接圆,应返回 degenerate 或按调用者预先声明的退化规则处理,不能把方向与内圆符号的乘积零解释为“第四点在圆上”。若 a,b,c 顺时针,符号整体反转。因此在非退化分支中,实际接口先核对 orient(a,b,c),或返回二者符号乘积

sign(orient(a,b,c))sign(InCircle(a,b,c,d)).

把坐标先平移到 d 可得到数值更紧凑的 3×3 行列式,但判定完全相同。

直觉

提升映射

(x,y)↦(x,y,x2+y2)

把平面点送到抛物面。前三点决定的圆对应提升空间中的一个平面;第四点位于圆内还是圆外,转化为其提升点位于该平面的哪一侧。行列式同时计算这个有向侧别。

这个符号关系也能直接从圆方程核验。设三点外接圆的圆心为 o、半径为 R。把行列式的第三列减去 2ox 倍第一列、2oy 倍第二列,再加 (‖o‖2−R2) 倍第四列;前三行的新第三项为零,第四行为 ‖d−o‖2−R2。沿该列展开,得到

InCircle(a,b,c,d)=orient(a,b,c)(R2−‖d−o‖2).

这同时说明为什么先平移到 d 不改变结果。

方向条件不能省略:交换 a,b 会改变行列式符号,却不会改变几何圆。只有把圆判定与三角形方向绑定,符号才有固定语义。

例子与边界

取

a=(0,0), b=(1,0), c=(0,1).

三点逆时针,其外接圆圆心为 (1/2,1/2)。点 d=(1/2,1/2) 在圆内,点 (1,1) 在圆上,而 (2,2) 在圆外,对应行列式正、零、负。

浮点直接求行列式在近共圆输入上可能因消去误判符号。几何算法需要的是谓词符号,而不是近似行列式数值;可用足够宽的整数或自适应精确算术取得原输入的真实符号。若另用 symbolic perturbation,应明确它按一套一致的无穷小扰动规则选择退化结果,而非把原来精确为零的行列式声称为非零。四点共圆时 Delaunay 对角线不唯一,算法必须规定一致的退化处理。

推论与应用

内接圆行列式在四点近共圆时会发生严重消去,符号必须由精确几何计算或可靠自适应谓词确定。用普通浮点结果的接近零值直接决定 Delaunay 翻边会破坏组合一致性。

Delaunay 三角剖分的局部空圆条件用该谓词判断是否翻转一条边。增量构造在定位包含新点的三角形后,反复检查相邻三角形的外接圆。

方向判定回答三点位于直线哪一侧;内接圆判定回答第四点相对圆的位置。二者都是鲁棒计算几何的基础谓词,但矩阵维度、几何退化与符号约定不同。

最小包围圆另外解决“哪一个圆能最小地覆盖全部输入”的优化问题:它需要至多三点的凸组合最优证书,并在违反时维护强制边界子问题。钝角三角形的外接圆就可能大于其最小包围圆,所以一个正确的四点内圆谓词并不独自完成该优化。

参考资料
  • Jonathan Richard Shewchuk, “Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates,” Discrete & Computational Geometry 18, 1997.
  • Mark de Berg et al., Computational Geometry: Algorithms and Applications, 3rd ed., Springer, 2008, Chapter 9.
  • Steven Fortune, “Numerical Stability of Algorithms for 2D Delaunay Triangulations,” International Journal of Computational Geometry & Applications 5(1–2), 1995.
关系图谱13 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具

被这些条目使用