从学术上讲,凸包的对偶问题很接近半平面交,所以二者算法很接近。
具体从bzoj1007水平可见直线说起:
求 n n n条 y ≥ k x + b y\geq kx+b y≥kx+b半平面交的并,答案是类似于凸包的下凸壳。
对偶变换:将直线 y = k x + b y=kx+b y=kx+b转成平面上的点 ( k , b ) (k,b) (k,b),求凸包的上凸壳。
证明:
对于求半平面交的过程:
首先按直线升序排序,双端队列队尾元素为 a , b a,b a,b,设交点为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),当前插入 c c c, b b b被弹出的条件是 y 0 ≤ ( y = c . k ⋅ x 0 + c . b ) y_0\leq (y=c.k·x_0+c.b) y0≤(y=c.k⋅x0+c.b)。
a . k ⋅ x 0 + a . b = b . k ⋅ x 0 + b . b = y 0 x 0 = − a . b − b . b a . k − b . k , y 0 = a . k ⋅ b . b − a . b ⋅ b . k a . k − b . k y = c . b ⋅ a . k − c . b ⋅ b . k − c . k ⋅ a . b + c . k ⋅ b . b a . k − b . k \ \quad a.k·x_0+a.b=b.k·x_0+b.b=y_0\\ x_0=-\dfrac{a.b-b.b}{a.k-b.k},y_0=\dfrac{a.k·b.b-a.b·b.k}{a.k-b.k}\\ y=\dfrac{c.b·a.k-c.b·b.k-c.k·a.b+c.k·b.b}{a.k-b.k} a.k⋅x0+a.b=b.k⋅x0+b.b=y0x0=−a.k−b.ka.b−b.b,y0