Bresenham中点画圆法与二阶差分算法
2016-06-20 15:45
337 查看
void Bresenham(int radius, int r,COLORREF color, CDC* pDC) { int x = 0; int y = radius; int m = d - radius; CirclePoints(x, -y, r, color, pDC); CirclePoints(y, -x, r, color, pDC); CirclePoints(x, y, r, color, pDC); CirclePoints(-y, -x, r, color, pDC); while (y > x) { if (m < 0) { /* Select E */ m = 2 * x + 3 * d + m; } else { /* Select SE */ m = 2 * (x-y) + 5 * d + m; y = y - d; } x = x + d; CirclePoints(x, -y, r, color, pDC); CirclePoints(y, -x, r, color, pDC); CirclePoints(x, y, r, color, pDC); CirclePoints(y, x, r, color, pDC); CirclePoints(-x, -y, r, color, pDC); CirclePoints(-y, -x, r, color, pDC); CirclePoints(-y, x, r, color, pDC); CirclePoints(-x, y, r, color, pDC); } }
void dSE(int radius, int r, COLORREF color, CDC* pDC) { int x = 0; int y = radius; int m = d - radius; int dE = 3*d; int dSE = -2 * radius + 5*d; CirclePoints(x, -y, r, color, pDC); CirclePoints(y, -x, r, color, pDC); CirclePoints(x, y, r, color, pDC); CirclePoints(-y, -x, r, color, pDC); while (y > x) { if (m < 0) { /* Select E */ m = dE + m; dE = dE + 2 * d; dSE = dSE + 2 * d; } else { /* Select SE */ m = dSE + m; dE = dE + 2 * d; dSE = dSE + 4 * d; y = y - d; } x = x + d; CirclePoints(x, -y, r , color, pDC); CirclePoints(y, -x, r, color, pDC); CirclePoints(x, y, r, color, pDC); CirclePoints(y, x, r, color, pDC); CirclePoints(-x, -y, r, color, pDC); CirclePoints(-y, -x, r, color, pDC); CirclePoints(-y, x, r, color, pDC); CirclePoints(-x, y, r, color, pDC); } }
相关文章推荐
- Toast源码分析 控制显示时间
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
- 第十六周--阅读程序
- 微信授权登录基本流程(网站应用)
- php 解决json_encode中文UNICODE转码问题
- 日常工作问题
- easyui datagrid 批量编辑和提交
- 教你实践ASP.NET Core Authorization[转]
- BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)
- 给TextView设置图片的两种实现方法
- dumpbin丢失mspdb 问题
- Bzoj4540:[Hnoi2016]序列:莫队+RMQ
- execel导出和下载
- javascript事件冒泡简单示例
- MapReduce从HBase多路径导出数据到Hive
- 4012
- runtime 详解
- sqlserver查询数据的所有表名和行数
- ASCII Unicode UTF-8互转
- BOS项目练习(activiti,历史数据操作,流程变量,任务组,监听器,网关,spring整合)