检测两种几乎简单的多边形
我感兴趣的决定给定的非简单的多边形是否是复杂性几乎简单,在任何两个不同的正式感官:弱简单或者非自交。由于这些术语尚未广为人知,因此让我从一些定义开始。 甲多边形 是线段的闭合循环连接一些有限序列在平面上的点的。点称为多边形的顶点,线段称为多边形的边。我们可以通过仅按顺序列出其顶点来指定任何多边形。PPPp0,p1,p2,…,pn−1p0,p1,p2,…,pn−1p_0, p_1, p_2, \dots, p_{n-1}pipip_ipipi+1modnpipi+1modnp_i p_{i+1\bmod n} 如果所有n个顶点都不同并且边仅在其端点处相交,则多边形很简单。等效地,如果多边形对圆是同胚的,并且每个边的长度都为正,则该多边形是简单的。但是,通常,多边形的顶点和边缘可以任意相交,甚至重合。1个nnn 考虑两条多边形路径AAA和BBB,它们的交点是两者的共同子路径(可能是一个点)。我们说,如果AAA和B的端点A(0),B(0),A(1),B(1)在公共子路径A \ cap B的邻域边界上交替,则A BBB 交叉。如果多边形具有两个交叉子路径,则该多边形是自交叉的,否则具有 非自交叉的。2A(0),B(0),A(1),B(1)A(0),B(0),A(1),B(1)A(0), B(0), A(1), B(1)A∩BA∩BA\cap B 如果多边形是一连串简单多边形的极限,则多边形是弱简单的;或者等效地,如果顶点的任意小扰动使多边形简单,则多边形是弱简单的。每个弱简单多边形都是非自相交的。但是,一些非自相交的多边形并不是那么简单。 例如,考虑以下所示的六个点a,b,p,q,x,ya,b,p,q,x,ya,b,p,q,x,y。 多边形abpqyzabpqyzabpqyz很简单;见左图。 多边形papbpqyqzqpapbpqyqzqpapbpqyqzq很弱;中间的图显示了附近的简单多边形。但是,此多边形并不简单,因为它访问了ppp三次。 多边形是自交的,因为子路径和交叉。见右图以获得一些直觉。b p q z y q p apapbpqzqyqpapbpqzqyqpapbpqzqyqbpqzbpqzbpqzyqpayqpayqpa 最后,多边形(绕中间多边形缠绕两次)是非自交叉的,但并不是那么简单。直观地,此多边形的转弯数为,而任何简单多边形的转弯数必须为。(形式上的证明需要进行一些案例分析,部分原因是实际上对于角为多边形,转数实际上没有很好地定义!)± 2 ± 1 0 ∘papbpqyqzqpapbpqyqzqpapbpqyqzqpapbpqyqzqpapbpqyqzqpapbpqyqzq±2±2\pm 2±1±1\pm 10∘0∘0^\circ 更新(9月13日):在下图中,多边形是非自交叉的,并且具有转弯数字1,但是并不是那么简单。多边形可以说有几个交叉的非简单子路径,但没有交叉的简单子路径。(我之所以说“可以说”,是因为目前尚不清楚如何定义两个非简单步行的时间!)abcabcxyzxpqrxzyxabcabcxyzxpqrxzyxabcabcxyzxpqrxzyx 最后,这是我的实际问题: 我们能多快确定给定的多边形是否非自交叉? 我们多快可以确定给定的多边形是否是弱简单的? 可以在时间内解决第一个问题,如下所示。由于存在个顶点,因此存在个顶点到顶点子路径;我们可以测试任何特定的子路径在时间内是否简单(通过蛮力)。对于每对简单的顶点到顶点子路径,我们可以测试它们是否在时间内交叉。但这不可能是最好的算法。n O (n 2)O (n …