一,预处理

数据结构是两个栈,
S栈和T栈。根据先下后左的方式,找到凸包的第一个元素,放入S栈,再将该点的极角,从小到大排序,放入T栈,其中,T栈的第一个元素放入S栈,形成第一个极边。(S栈是1,2,T栈是3-8)
二,算法核心
S栈的栈顶元素和次栈顶元素连成直线,将T栈的栈顶元素弹出,如果T栈顶元素满足ToLeft测试,则把T栈顶元素压入S栈栈顶,依次类推,直到T栈顶为空,则S栈从下到上为逆时针的凸包。

三,最简单的案例,

这些点都是凸包的极点。如图从右到左,红色是S栈的栈顶元素和此栈顶元素,以及T栈比较的栈顶元素,这三个点进行ToLeft测试,绿色是S栈不进行比较的元素,蓝色是T栈不进行比较的元素,最终,T栈为空,S栈全为绿色
文章介绍了通过预处理数据结构(两个栈S和T)及核心算法,遵循先下后左规则找到凸包元素。S栈存储凸包点,T栈按极角排序,通过ToLeft测试更新S栈。最简单的案例中,所有点本身就是凸包。最终,T栈空,S栈得到逆时针凸包序列。
7589

被折叠的 条评论
为什么被折叠?



