本帖最后由 TeeTown 于 2017-4-18 21:28 编辑
想法是:对于三角形ABC,选一顶点A(Xa,Ya)为起点,另一点D(X,Y)在BC移动,扫描D从B到C,画线AD则填充三角形。函数编写如下:void Draw1_Triangle(u16 Xa, u16 Ya, u16 Xb,u16 Yb, u16 Xc, u16 Yc) //参数为三角形ABC三点坐标{ u16 X,Y,temp; if(Yb>Yc) {temp=Yb; Yb=Yc;Yc=temp;} //始终让Yb<Yc if(Xb>Xc) {temp=Xb; Xb=Xc;Xc=temp;} //始终让Xb<Xc if(Xb==Xc) { X=Xb; for(Y=Yb;Y<Yc+1;Y++) //如果BC竖直,则只需变化动点的纵坐标即可 LCD_DrawLine(X,Y,Xa,Ya); // LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)为例程函数,画(x1,y1)到(x2,y2)线段 } else { for(X=Xb;X<Xc+1;X++) { Y=Yb+(X-Xb)*(Yc-Yb)/(Xc-Xb); //一般情况BC为斜线或水平线,X,Y需满足直线BC的直线方程 LCD_DrawLine(X,Y,Xa,Ya); } } } 实测结果为:在main函数中参数设置如下Draw1_Triangle(90,90,150,150,90,150);//正常显示,如下图所示。(哎,不能贴图片,只能将就画个示意图)A|| | |
----C B而把A、C坐标交换则无法正常显示,即Draw1_Triangle(90,150,150,150,90,90);//不能正常显示,BC中部附近不能完全填充。C|| | |
----A B开始怀疑D(X,Y)不完全落在BC上,但是通过C-Free编程验证,对于X从Xc变化到Xb,D(X,Y)全部落在BC上,没有遗漏一个点,即(X,Y)=(90,90),(91,91),...(150,150)。
请问各位高手以上是什么问题呢?
原子哥能否改进一下论坛可以上传图片啊!!
一周热门 更多>