How to draw a cloud shape with MFC
问题描述:添加一种云状,有曲线外边的绘图工具,类似line,circle,rectangle。通过鼠标点击的点确定图形的顶点,在由此形成的多边形外围绘制曲线,形成最终图形。多边形可以凸或者凹,但不可以自交叉(self-intersect)。
解决方案:每次取出两个相邻的顶点,通过计算两顶点的距离,得出可以绘制弧线的数量,并绘制数目不等的半圆弧连接顶点,这时弧线的半径是固定的。(当然也可以绘制固定个数的弧线,此时弧线的半径是可变的,但是忽大忽小的弧线导致绘制效果不太理想。)
遇到的问题:
1. 当弧线半径一定时,顶点间的距离无法保证可以绘制完整的弧线。
有两个选择:一个是在顶点处终止弧的绘制,每条边自行负责绘制弧线。另一个是当一个边的距离不够绘制一个完整的弧线时,跨越顶点绘制到邻近的边上,这时候绘制的不是半圆弧了。第二种方法需要更多的计算。相比之下,第一种方法比较简单,但是有两种情况需要区分:
(1)两顶点的距离非常近,无法绘制出一个完整的弧。(N=0)
此时需要直接用两个顶点作为弧线的起始点,绘制一个小弧。
(2)两顶点的距离足够绘制N(N>=1)个完整的弧,但还会有剩余的距离绘制一个不完整的弧。