OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4551|回复: 3

画实心三角形问题

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-4-4
在线时间
11 小时
发表于 2017-4-18 11:47:32 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 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)。

请问各位高手以上是什么问题呢?

原子哥能否改进一下论坛可以上传图片啊!!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-20 01:22:28 | 显示全部楼层
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-4-4
在线时间
11 小时
 楼主| 发表于 2017-4-20 23:33:14 | 显示全部楼层
回复

使用道具 举报

5

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2020-7-9
在线时间
70 小时
发表于 2021-1-12 17:40:14 | 显示全部楼层
这个 划小点的 看不出来 啥  大问题 ,大的 三角形 根本不行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 18:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表