一,预处理
数据结构是两个栈,
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栈全为绿色