这个是个一般情况
1,初始化
如上图所示,按照先下后左的方式,先确定第一个极点1,然后以1为顶点按照角度排序,将1和最小的角度2放入S栈,将3-8按照角度从大到小压入T栈。
2,
从S栈的栈顶元素2和次栈顶元素1取出,画一条线(1,2),弹出T栈顶元素3,根据toleft,发现3在线段(1,2)的左侧,符合条件,将3压入S栈顶。
3,。
依次类推,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),弹出T栈顶元素4,根据toleft,发现4在线段(2,3)的左侧,符合条件,将4压入S栈顶
4,
继续,从S栈的栈顶元素4和次栈顶元素3取出,画一条线(3,4),弹出T栈顶元素5,根据toleft,发现5在线段(3,4)的右侧,不符合条件,将4从S栈顶弹出。
继续,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),根据toleft,发现5在线段(2,3)的左侧,符合条件,将5压入S栈顶。
5,
继续,从S栈的栈顶元素5和次栈顶元素3取出,画一条线(3,5),弹出T栈顶元素6,根据toleft,发现6在线段(3,5)的右侧,不符合条件,将5从S栈顶弹出。
继续,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),根据toleft,发现6在线段(2,3)的右侧,不符合条件,将3从S栈顶弹出。
继续,从S栈的栈顶元素2和次栈顶元素1取出,画一条线(1,2),根据toleft,发现6在线段(1,2)的左侧,符合条件,将6压入S栈顶。
6,
继续,从S栈的栈顶元素6和次栈顶元素2取出,画一条线(2,6),根据toleft,发现7在线段(2,6)的左侧,符合条件,将7压入S栈顶。
7,
继续,从S栈的栈顶元素7和次栈顶元素6取出,画一条线(6,7),根据toleft,发现8在线段(6,7)的右侧,不符合条件,将7从S栈顶弹出。
继续,从S栈的栈顶元素6和次栈顶元素2取出,画一条线(2,6),根据toleft,发现8在线段(2,6)的左侧,符合条件,将8压入S栈顶。
此时,栈T为空,结束,凸包S栈底到栈顶为1->2->6->8->1