对旋转卡壳算法的正确性理解
其实整个代码关键就在于边在不停地逆时针旋转,这时对踵点也会跟着逆时针旋转。
理解这个性质只需理解两点:
1.点按照逆时针顺序排下来的话,到极值之前单调递增。
这个很显然。画个图简单理解一下就可以了。
2.随着线的逆时针向前走,对踵点也逆时针向前走
先上个图
(然而这个图并没有什么卵用
旋转的最开始从粉色的那个点出发。这个时候其对踵点一定是上凸壳上的某个点。
为什么呢?因为下凸壳斜率递增。不可能存在两个斜率把这个斜率“夹”起来
然后逆时针走啊走,发现到上、下凸壳交接点之前斜率一定递增。所以点一直在逆时针转啊转(也有可能不动啊喂
到交接点前的那条边,其对踵点应该在上凸壳,理由同上。
(刚刚说的上凸壳、下凸壳都是包括交界点的
然后注意,过交界点的时候。注意过了交界点那条边,其对踵点一定在下凸壳。理由同上。
所以点还是在逆时针转啊
所以第二个性质“随着边的逆时针转,点一定逆时针转“满足。
然后就爽了。
如果你没有看懂上面在说什么的话。。
突然想到lrj老师的大白上有个简单理解而且比我这个好多啦?让我回忆一下嗯好像是这样的。。
每次换边的时候就相当于图形顺时针转动,然后这个时候对应的点一定会逆时针走。
好像简单粗暴好理解啊QAQ,顿感不爱我自己琢磨了这么长时间QAQ