对旋转卡壳算法的正确性理解

其实整个代码关键就在于边在不停地逆时针旋转,这时对踵点也会跟着逆时针旋转。

理解这个性质只需理解两点:

1.点按照逆时针顺序排下来的话,到极值之前单调递增。

   这个很显然。画个图简单理解一下就可以了。

2.随着线的逆时针向前走,对踵点也逆时针向前走

先上个图

然而这个图并没有什么卵用

旋转的最开始从粉色的那个点出发。这个时候其对踵点一定是上凸壳上的某个点。

为什么呢?因为下凸壳斜率递增。不可能存在两个斜率把这个斜率“夹”起来

然后逆时针走啊走,发现到上、下凸壳交接点之前斜率一定递增。所以点一直在逆时针转啊转(也有可能不动啊喂

到交接点前的那条边,其对踵点应该在上凸壳,理由同上。

(刚刚说的上凸壳、下凸壳都是包括交界点的

然后注意,过交界点的时候。注意过了交界点那条边,其对踵点一定在下凸壳。理由同上。

所以点还是在逆时针转啊

所以第二个性质“随着边的逆时针转,点一定逆时针转“满足。

然后就爽了。

如果你没有看懂上面在说什么的话。。

突然想到lrj老师的大白上有个简单理解而且比我这个好多啦?让我回忆一下嗯好像是这样的。。

每次换边的时候就相当于图形顺时针转动,然后这个时候对应的点一定会逆时针走。

好像简单粗暴好理解啊QAQ,顿感不爱我自己琢磨了这么长时间QAQ

 

posted @ 2015-06-14 13:08  清羽晨风  阅读(1790)  评论(1编辑  收藏  举报