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 20:07:53 浏览: 12
有可能是以下几个原因: 1. 给定的两个点坐标不合法,比如两个点的横纵坐标相等,或者两个点的坐标差值太大,超出了绘制范围。 2. 绘图设备 DCPoint 没有被正确初始化,导致无法绘制像素点。 3. 绘图设备的画笔属性没有被正确设置,导致无法绘制像素点。 4. 在计算斜率 k 的过程中出现了除 0 的情况,导致程序崩溃。 你可以检查以上几个原因,看看哪一个是导致无法绘制直线的原因。同时,你也可以将代码中的绘制方式改为其他方式,比如使用 GDI+ 绘制直线,或者使用 OpenGL 绘制直线。这些方式都可以实现直线的绘制。
相关问题

用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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

从键盘输入一段英文字符串,其中包含多个字母‘h',请编写程序利用正则表达式,将英文字符串中的’h'全部改为‘H’

好的,我可以帮您解决这个问题。 您可以使用 Python 编写一个程序来实现这个功能。具体步骤如下: 1. 首先导入 re 模块,这个模块是 Python 中用于处理正则表达式的模块。 2. 然后定义一个包含英文字符串的变量,例如: text = "This is a string containing multiple h's." 3. 接下来,使用 re.sub() 方法来进行替换操作。re.sub() 方法的第一个参数是正则表达式,第二个参数是替换的字符或字符串,第三个参数是被替换的字符串。在这个例子里,我们需要将所有的小写字母 h 替换成大写字母 H,所以正则表达式可以写成
recommend-type

JSBSim Reference Manual

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