具体算法的原理我没有深入研究,总之用来快速画直线和画圆是目前很成熟的算法,拿来就用了^-^
整个算法过程中只用了整数加减和移位,非常适用于运算能力有限的单片机系统。
以下代码只需要把SetPixel替换为目标平台的画点函数就可以了。

//-------------------------------------------------------------------------------------------------
//画直线(x1,y1为起点坐标,x2,y2为终点坐标,绘制的直线包括起点,但不包括终点)
void DrawLine(int x1, int y1, int x2, int y2, int color)
{int di;int dx;int dy;int gx;int gy;di = 0;gx = (x2 > x1) ? 1 : -1;gy = (y2 > y1) ? 1 : -1;dx = (x2 - x1) * gx + 1;dy = (y2 - y1) * gy + 1;if(dx >= dy){for(/*x2 += gx*/; x1 != x2; x1 += gx){di += dy;if(di <= dx){SetPixel(dc, x1, y1, color);continue;}while((di > dx) && (y1 != y2)){di -= dx;y1 += gy;SetPixel(dc, x1, y1, color);}}}else{for(/*y2 += gw*/; y1 != y2; y1 += gy){di += dx;if(di <= dy){SetPixel(dc, x1, y1, color);continue;}while((di > dy) && (x1 != x2)){di -= dy;x1 += gx;SetPixel(dc, x1, y1, color);}}}
}//-------------------------------------------------------------------------------------------------
//画圆(x,y为圆心坐标,r为圆的半径,圆心的真实物理位置是x,y这个像素的左上角)
void DrawCircle(int x, int y, int r, int color)
{int  xi;int  yi;int  di;di = 0 - (r >> 1);xi = 0;yi = r;while(yi >= xi){SetPixel(x + xi - 1, y + yi - 1, color);SetPixel(x + yi - 1, y + xi - 1, color);SetPixel(x - xi, y + yi - 1, color);SetPixel(x - yi, y + xi - 1, color);SetPixel(x - xi, y - yi, color);SetPixel(x - yi, y - xi, color);SetPixel(x + xi - 1, y - yi, color);SetPixel(x + yi - 1, y - xi, color);xi++;if (di < 0){di += xi;}else{yi--;di += xi - yi;}}
}

已知问题:画圆时会有一些像素点被重复绘制。

C语言快速画直线和画圆的代码相关推荐

  1. Unity3D中用Vectrosity插件画直线、画点、画曲线、画方框

    Unity3D中用Vectrosity插件画直线.画点.画曲线.画方框 .Vectrosity插件是Unity3D目前发现的一个画线最好的工具插件. // Make Vector2 array; in ...

  2. (重点)C#/Csharp桌面应用开发小作业小程序,测距仪,画圆,GDI画圆,画直线,绘制圆,绘制直线,绘制虚线,dashpattern的应用

    简介 这次试验具有一定难度,因为我们对于C#得画板接触得比较少,但是我认为老师很可能在考试的时候在这上面大出文章,所以这个实验我会详细的解析C#的GDI+ 首先,我们要画图形,就要调用Paint方法, ...

  3. ps中怎么画直线和画参考线

    ps中怎么画直线 1.需要先创建一个背景,或者打开一幅图也可以,然后点击"画笔工具". 2.在白色背景图上点击鼠标右键,弹出画笔选项,可以调节画笔宽度. 3.按住shift键,按住 ...

  4. java画板中画直线_画图板(画直线)

    1.创建一个画图板(界面) public class DrawUI { //显示界面的方法 public void show(){ //创建界面对象 JFrame jframe = new JFram ...

  5. c语言中怎么画直线,ps如何画直线 【操作流程】

    大家都知道电脑使用起来非常方便,但遇见ps如何画直线 的时候就非常头疼了,如果你是第一次遇到ps如何画直线 ,怎么样才能快速解决ps如何画直线 带来的烦恼呢?小编为大家收集了很多关于ps如何画直线 问 ...

  6. 运用C#在VS2017的PictureBox控件中绘制简易二自由度机械臂,并且让机械臂实现画直线、圆、人物轮廓及写字的功能。

    运用C#在VS2017的PictureBox控件中绘制简易二自由度机械臂,并且让机械臂实现画直线.圆.人物轮廓及写字的功能. 给大家看看效果吧 演示写字视频在下: VID 首先放置了诸多控件 在给控件 ...

  7. Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形

    OpenCV 中的绘图函数 使用 OpenCV 绘制不同几何图形,其中包括的函数有 cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2. ...

  8. msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么

    1 说明: ====== 1.1 python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂. 1.2 内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面 ...

  9. 【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆Bresenham算法实现(基于打点函数,算法可移植到任何屏幕的驱动程序之上)

    0. 引言 TFT-LCD屏幕的画直线.画斜线.画矩形.画圆等算法都是基于打点函数的,所以此程序可以移植到任何屏幕的基本驱动程序之上. 1. 打点函数 -- 底层函数(移植需修改) 打点函数其实就是屏 ...

最新文章

  1. 设计模式-装饰模式(08)
  2. python matplotlib.pyplot.imshow() (在2D常规栅格上显示图像(数据))
  3. c语言字符初始化怎么表示,C语言初始化字符串 怎么进行字符串赋值?C语言
  4. Jenkins Pipline语法
  5. 收藏 | PyTorch实现各种注意力机制
  6. OpenCV:使用python-cv2实现视频的分解与合成
  7. Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案
  8. 【BZOJ】3576: [Hnoi2014]江南乐
  9. ORACLE RMAN备份--差异增量与累积增量的策略实例图
  10. Jupyter Notebook 作图显示中文
  11. 以下选项不是python文本处理方向第三方库_Python程序设计-超星尔雅-学习通-题库零氪...
  12. java mybatis优点_mybatis优缺点是什么?有哪些优点和缺点?
  13. Unity Editor 基础篇(三):自定义窗口
  14. 计网 | 网络层 SDN控制器 / 远程控制器
  15. Java 时间处理 ZoneId
  16. maven-基本命令,打包包名问题
  17. python自动登录并提交表单_用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)...
  18. sudo no tty present and no askpass program specified
  19. 服务器ssl证书升级
  20. 点开计算机桌面选项怎么不见了,电脑桌面开始菜单不见了应该如何解决?_开始菜单不见了解决办法介绍...

热门文章

  1. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。
  2. 一场惊天跨国跨时区作弊案,除了需要爆表智商,还需要啥?
  3. 周易六十四卦——解卦
  4. java获取xml子节点_java如何获取XML中子节点的内容
  5. 下拉刷新和上拉加载 php,怎样操作vue2.0 移动端实现下拉刷新和上拉加载
  6. PTA 数据结构及算法 7-47 打印选课学生名单
  7. 欧洲杯决赛倒计时,球迷经济带火了哪些产品?
  8. 盘点数据库2013之一:数据分析崛起
  9. “在线”正当道,8款在线原型工具推荐
  10. 如何简单有效的判断边界值