迪文科技论坛

 找回密码
 立即注册
搜索
查看: 1029|回复: 0

KEIL C实现类似TA指令集的数学图形功能(显示21功能0E码)

[复制链接]

45

主题

254

回帖

3617

积分

论坛元老

Rank: 8Rank: 8

积分
3617
发表于 2020-4-21 23:38:12 | 显示全部楼层 |阅读模式
本帖最后由 舞指飞扬 于 2020-4-22 00:29 编辑

主要是应用计算机图形学的Bresenham算法在"基本图形"0E单色位图 的应用
所有的绘图函数没用浮点运算因此能保证速度和避免数值计算溢出

void Bresenham(int x1, int y1, int x2, int y2,u8 color1) //端点,端点,颜色
{
        int x, y, dx, dy, p1, i;
        int maxer=0,miner=0;
        dx = x2 - x1;                        
        dy = y2 - y1;
        if (abs(dx) > abs(dy)) //斜率绝对值在(0,1),步进方向为x轴
        {            
                if (x1 < x2)      //默认画点从左往右画
                {                  
                        x = x1;
                        y = y1;
                }
                else
                {
                        x = x2;
                        y = y2;
                }      
                putpixel(x + x0, y0 - y,  color1);
                p1 = 2 * abs(dy) - abs(dx);          //计算初始pi的值
        if (x1>=x2){maxer=x1;miner=x2;}else{maxer=x2;miner=x1;}
                for (i = miner; i < maxer; i++)
                {
                        x = x + 1;
                        if (p1 >= 0)
                        {
                                if (dx*dy >= 0)
                                        y = y + 1;
                                else
                                        y = y - 1;                        //若Pi>=0,y(i+1)=y(i)±1
                                p1 = p1 + 2 * (abs(dy) - abs(dx));    //更新pi
                        }
                        else
                        {
                                y = y;                                //若Pi<0,y(i+1)=y(i)
                                p1 = p1 + 2 * abs(dy);                //更新pi
                        }
                        putpixel(x + x0, y0 - y,color1);
            }
        }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-10 10:37 , Processed in 0.035923 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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