【trick】半平面交对偶转凸包问题-bzoj1007水平可见直线&bzoj3199escape

本文介绍了半平面交问题与凸包问题的对偶转换,通过将直线转换为点来求解半平面交的并,等效于求解凸包的上凸壳。以bzoj1007和bzoj3199题目为例,阐述了这种转换的证明过程,并提供了代码实现。这种方法的优点包括代码简洁、理解容易、精度高和常数小,但应用范围相对有限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门:半平面交对偶转凸包问题-Trinkle


从学术上讲,凸包的对偶问题很接近半平面交,所以二者算法很接近。

具体从bzoj1007水平可见直线说起:

n n n y ≥ k x + b y\geq kx+b ykx+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.kx0+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.kx0+a.b=b.kx0+b.b=y0x0=a.kb.ka.bb.b,y0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值