画实心三角形问题

2019-08-20 18:28发布

本帖最后由 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)。
请问各位高手以上是什么问题呢?
原子哥能否改进一下论坛可以上传图片啊!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。