int x,y,x0, y0, x1, y1,a,b; int d0, d1, d2; float k; DCPoint->SetROP2(R2_COPYPEN);//绘图方法为直接画 //直线端点由鼠标确定后存放在group[0]、group[1] x0 = group[0].x; y0 = group[0].y; x1 = group[1].x; y1 = group[1].y; a = y0 - y1; b = x1 - x0; d0 = 2 * a + b; d1 = a; d2 = a + b; if (x0 == x1 && y0 == y1)return; if (x0 == x1)//垂直线,k不存在 { if (y0 > y1) { x = y0; y0 = y1; y1 = x; } for (x = y0; x <= y1; x++) { DCPoint->SetPixel(x0, x, RGB(255, 0, 0)); } return; } if (y0 == y1)//水平线,k=0 { if (x0 > x1) { x = x0; x0 = x1; x1 = x; } for (x = x0; x <= x1; x++) { DCPoint->SetPixel(x, y0, RGB(255, 0, 0)); } return; } if ((!x0 == x1) && (!y0 == y1)) { k = (-a) / b; x = x0; y = y0; for (; x <= x1;) { DCPoint->SetPixel(x, y, RGB(255, 0, 0)); if (d0 <= 0) { x++, y++, d0 += d2; } else { x++, d0 += d1; } }

时间: 2024-04-04 21:07:53 浏览: 13
这段代码是画一条直线的代码,其中涉及到了直线的斜率计算和 Bresenham 算法。具体来说,代码中通过给定的两个点坐标,计算出直线的斜率 k,并根据斜率 k 和 Bresenham 算法来逐点绘制直线。在绘制过程中,通过判断斜率和点的位置关系来确定绘制的方向和下一个点的位置。最后,使用 SetPixel 函数来绘制像素点。
相关问题

用void MidPointEllipse(int x0,int y0,int x1,int y1,void (*SetPixel)(int x,int y))写中点画椭圆的代码

void MidPointEllipse(int x0, int y0, int x1, int y1, void (*SetPixel)(int x, int y)) { int a = abs(x1 - x0); int b = abs(y1 - y0); int b2 = b * b; int a2 = a * a; int d = a2 + b2 * (-a + 1) / 4 + b2 / 4; int x = 0; int y = b; while (a2 * (y - 0.5) > b2 * (x + 1)) { if (d < 0) { d += a2 * (2 * y + 3); } else { d += a2 * (2 * y + 3) + b2 * (-2 * x + 2); x++; } y--; SetPixel(x0 + x, y0 + y); SetPixel(x0 + x, y0 - y); SetPixel(x0 - x, y0 + y); SetPixel(x0 - x, y0 - y); } d = a2 * (y * y - y) + b2 * (x * x + x - a2 * b2); while (y >= 0) { SetPixel(x0 + x, y0 + y); SetPixel(x0 + x, y0 - y); SetPixel(x0 - x, y0 + y); SetPixel(x0 - x, y0 - y); if (d < 0) { d += a2 * (2 * y - 1) + b2 * (2 * x + 2); x++; } else { d += b2 * (2 * x + 2); } y--; } }

用void MidPointCircle(int x0,int y0,int x1,int y1,void (*SetPixel)(int x,int y))写中点画圆的代码

void MidPointCircle(int x0, int y0, int x1, int y1, void(*SetPixel)(int x, int y)) { int r = sqrt(pow((x1 - x0), 2) + pow((y1 - y0), 2)); // 计算圆的半径 int x = 0, y = r; int d = 1 - r; // 初始决策参数 SetPixel(x0 + x, y0 + y); SetPixel(x0 - x, y0 + y); SetPixel(x0 + x, y0 - y); SetPixel(x0 - x, y0 - y); SetPixel(x0 + y, y0 + x); SetPixel(x0 - y, y0 + x); SetPixel(x0 + y, y0 - x); SetPixel(x0 - y, y0 - x); while (x < y) { if (d < 0) { d += (x << 1) + 3; } else { d += ((x - y) << 1) + 5; y--; } x++; SetPixel(x0 + x, y0 + y); SetPixel(x0 - x, y0 + y); SetPixel(x0 + x, y0 - y); SetPixel(x0 - x, y0 - y); SetPixel(x0 + y, y0 + x); SetPixel(x0 - y, y0 + x); SetPixel(x0 + y, y0 - x); SetPixel(x0 - y, y0 - x); } }

相关推荐

最新推荐

recommend-type

Keil MDK-ARM各种数据类型占用的字节数 char short int float double

Keil MDK-ARM各种数据类型占用的字节数 char short int float double占用字节数,uCOS-II
recommend-type

C语言中int到float的强制类型转换

最近项目中经常需要int与float之间转换,有必要对它们之间转换的原理做个了解。
recommend-type

使用Java代码将IP地址转换为int类型的方法

主要介绍了使用Java代码将IP地址转换为int类型的方法,这也是各大计算机考试和ACM以及面试的常见基础问题,需要的朋友可以参考下
recommend-type

C++中int类型按字节打印输出的方法

主要给大家介绍了关于C++中int类型按字节打印输出的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
recommend-type

在Java中int和byte[]的相互转换

主要介绍了在Java中int和byte[]的相互转换的相关资料,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。