跳到正文
格致开物MATHWIKI

重心坐标

重心坐标(barycentric coordinates)用系数之和为一的线性组合表示一个点。若 v0,…,vk 仿射独立,点 x 在它们的仿射包内可唯一写成 x=∑i=0kλivi,∑i=0kλi=1. 这组实数 (λ0,…,λk) 称为相对于这些顶点的归一化重心坐标。负坐标允许点落在单纯形外;全部坐标非负时,点位于这些顶点的凸包内。[1]

取三角形 A=(0,0)、B=(4,0)、C=(0,3),求 P=(1,1) 的坐标。横坐标给出 4λB=1,纵坐标给出 3λC=1,再用系数和得 (λA,λB,λC)=(512,14,13). 三者都正,说明点严格在三角形内部;代回得 (1,1),不是只核对系数之和。

仿射独立保证唯一性

将 λ0=1−∑i=1kλi 代回定义,得到 x−v0=∑i=1kλi(vi−v0). 仿射独立恰好意味着右边的差向量线性无关,它们又张成仿射包的方向空间,因此系数存在且唯一。更直接地,若两组系数都表示 x,相减后有 ∑iδivi=0、∑iδi=0;消去 δ0 后,由差向量线性无关得到全部 δi=0。

若顶点共线,唯一性就可能失败。例如在直线上取位置零、一、二,点一既可写为 0⋅0+1⋅1+0⋅2,也可写为 12⋅0+0⋅1+12⋅2。系数和都为一,却不是同一组坐标。三角形算法中面积为零时遇到的除零,正对应这个仿射退化。

有向面积与坐标的对应

在平面中以 [UVW] 表示三点构成的有向面积,即 12det⁡(V−U,W−U)。三角形不退化时, λA=[PBC][ABC],λB=[APC][ABC],λC=[ABP][ABC]. 证明以第一式为例。利用行列式对各点的仿射线性性,将 P=λAA+λBB+λCC 代入有向面积;重复顶点的面积为零,剩下 [PBC]=λA[ABC]。另两式同理。分母非零是能相除的必要条件。

三角形ABC面积六,内点P一一将它分成面积五除以二、三除以二和二的三个子三角形。
三个子三角形的面积分别除以总面积,给出与对面顶点对应的重心坐标。

主例总面积为六;[PBC]=5/2、[APC]=3/2、[ABP]=2,除以六得到前面的 5/12,1/4,1/3。图中面积与坐标的索引要交叉看:顶点 A 的权重来自不含 A 的子三角形 PBC。

变式取 Q=(5,1)。坐标为 (−7/12,5/4,1/3),第一个为负,说明越过了边 BC。此时 [QBC]=−7/2,有向面积保留负号;若把三个面积都取绝对值,其比值之和不再为一,就不能直接作为归一化重心坐标。

凸组合与边界识别

三角形连同边界正是三顶点的凸包,所以重心坐标全部非负当且仅当点在三角形内或边上。若 λA=0,表示只由 B,C 组合,点在边 BC 的直线上;再要求另外两者非负,才保证位于边线段上。若两个坐标为零,余下坐标必为一,点恰为相应顶点。

例如 M=(2,3/2) 的坐标为 (0,1/2,1/2),是边 BC 中点。只有“某个坐标为零”并不足以断言在线段内:(0,2,−1) 也给出边所在直线上的点,但已越过端点。

仿射插值与坐标约定

给顶点标量值 f(A)=2,f(B)=10,f(C)=5,用 f(P)=λAf(A)+λBf(B)+λCf(C) 做仿射插值。代入主例得 5/6+5/2+5/3=5。三个顶点确定的仿射函数实际上是 f(x,y)=2+2x+y,直接代入 (1,1) 也为五。保持仿射函数正是这种坐标的线性精度,不表示任意非线性函数的真实值也由三个样本唯一决定。

几何文献有时使用齐次重心坐标 (a:b:c),允许同时乘非零常数。若 a+b+c≠0,可除以总和得到本文的归一化坐标;总和为零的非零三元组不对应通常仿射平面中的有限点。使用面积比、插值和跨软件交换数据时,应先确认归一化方式与顶点顺序。

参考文献

  1. ↑ CGAL,2D Generalized Barycentric Coordinates,三角形坐标与线性精度。