整体思路:
- 根据给定的点P,做插值均分,得到N个P点
- 将N个P点进行求角平分线(TB)
- 然后再角平分线(TB)的正反方向进行D距离的拓宽,得到PT,PB,算出T点、B点
- 将所有的T点、B点进行连接,使用triangle strip进行绘制
关于插值均分算法,参考:
-
https://medium.com/@intmainreturn00/drawing-smooth-lines-with-cocos2dx-d057c41b8af2
理解上上述算法后,你会发现当三个点如果组成了锐角(或者小于一定角度)的情况下:
上图是将2个输入点之间插入了2个均分点,也就是将一条线段切成了3份。
仔细观察绘制结果,会发现三角形会相互叠加,顶点比较乱。
优化方案:
-
对原始的点P进行二阶贝塞尔,将P2变为贝塞尔曲线t=0.5的位置,这样所可能会让曲线偏离设定的目标点。
-
优化后,线条的确好了很多,但是转角处还是不够顺滑
-
同理,对生成的T点、B点进行再次进行贝塞尔曲线t=0.5的优化
经过上述优化,基本上整体已经非常平滑了,基本满足使用需求,但是当出现大幅度的锐角弯时,还是有点问题,这个只能从制作层面避免啦,暂时没有好的优化方案。
网友评论