读书人

过度圆角的算法

发布时间: 2012-09-17 12:06:51 作者: rapoo

过渡圆角的算法

如图1,任意块(j, i),该块正上方(Top)的座标为(j, i-1),正左方(Left)的座标为(j-1, i),正右方(Right)的座标为(j+1, i),正下方(Bottom)的座标为(j, i+)。

算法A(见图2):

如果其正上(下、左、右)方任意两相邻方(比如:正上方与正左方)同时为空心,则该块内部左上方裁除圆角(如:M1,)。为了描述方便,如图1中间橙色部分(j, i)块所示,M表示裁除,1表示左上方,2表示右上方,3表示右下方,4表示左下方,如M3表示右下方裁除圆角区)。类似的如图4之M2(裁除右上角)。

过度圆角的算法

算法B(见图3):

如果任意块(j, i), 其正上(下、左、右)方任意两相邻方(比如:正上方与正左方)同时为实,且该块的对角块TopLeft方向上的块(j-1, i-1)为空心,则该块的对角块之右下角添加一圆角(如:A3,同理,A表示添加,3表示右下角)。

类似如图4所示A2,因当前块(j, i)之正左方(j-1,i)块与正下方(j,i+)块同时为实心,且其对角块为空心,则其对角块之右上方添加圆角A2。

总之,圆角化的算法就是算法A与算法B了。

以下图5、图6为较典型的实例样式:

过度圆角的算法

事实上,上面图1-图4均为简化表示方式,如果按照算法A与算法B,最终的图示结果应该为图1' - 图4' 所示:

过度圆角的算法

最近太忙,时间有限,哪位大侠有空,将上述算法使用C#代码实现一下?代码贴在评论处或EMAIL给我(EMAIL:a3net@qq.com),谢了!

读书人网 >其他相关

热点推荐