DDA(数值微分法)基于直线微分方程生成直线。

点xi,yi满足直线方程yi=kxi+b,

若xi增加一个单位,则下一步点的位置(xi + 1,yi+1)满足yi+1=k(xi + 1)+ b。

即yi+1=yi+k。

yi同理,不再赘述。

算法基本思想:

选择平缓的一端(即x2-x1和y2-y1的较大者)作为自变量,每次增加一个单位,计算因变量的值。

具体代码如下:

void DDA_Line(int x1,int y1,int x2,int y2) {
float increx, increy, x, y, length;//变量定义
int i;
if (abs(x2 - x1) > abs(y2 - y1))//判断以哪个作增量
length = abs(x2 - x1);
else
length = abs(y2 - y1);
increx = (x2 - x1) / length;//设置增量,一个为1,一个为k
increy = (y2 - y1) / length;
x = x1, y = y1;//起点
for (i = 1; i <= length; i++) {
putpixel(int(x + 0.5), int(y + 0.5), RED);//因为没有半个像素点,所以需要强制转换为整型
x += increx;//x+增量
y += increy;//y+增量
}
}

下面我们进行调用:

int main()
{
initgraph(640, 480);
DDA_Line(0, 0, 640, 480);
getchar();
closegraph();
}

结果如下:

画直线的算法之DDA算法+代码实现(法一)的更多相关文章

  1. 图形学入门(1)——直线生成算法(DDA和Bresenham)

    开一个新坑,记录从零开始学习图形学的过程,现在还是个正在学习的萌新,写的不好请见谅. 首先从最基础的直线生成算法开始,当我们要在屏幕上画一条直线时,由于屏幕由一个个像素组成,所以实际上计算机显示的直线 ...

  2. 《图形学》实验三:DDA算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用DDA算法画直线. 实验结果: 代码: #include <gl/glut.h> #include <math.h> ...

  3. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

  4. 基于Bresenham和DDA算法画线段

    直线:y=kx+b 为了将他在显示屏上显示出来,我们需要为相应的点赋值,那么考虑到计算机的乘法执行效率,我们肯定不会选择用Y=kx+b这个表达式求值,然后进行画线段. 我们应当是将它转化为加法运算. ...

  5. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

  6. 《图形学》实验四:中点Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...

  7. opencv利用hough概率变换拟合得到直线后,利用DDA算法得到直线上的像素点坐标

    图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标? 这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是 ...

  8. Bresenham快速画直线算法

    现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这 ...

  9. 直线扫描转换-DDA算法

    直线扫描转换-DDA算法 直线段的扫描转换算法 已知两个点,求直线. 为了在光栅显示器上用这些离散的像素点逼近这条直线,需要知道这些像素点的x,y坐标. 求出过P0,P1的直线段方程: y=kx+b ...

随机推荐

  1. HCTF Warmup (phpmyadmin4.8.1的文件包含漏洞 )

    Warmup 先看hint   image.png 看url有file参数,感觉可能要用伪协议啥的,试了下,没出东西扫一下目录,发现http://warmup.2018.hctf.io/source. ...

  2. 恕我直言!!!对于Maven,菜鸟玩dependency,神仙玩plugin

    打包是一项神圣.而庄严的工作.package意味着我们离生产已经非常近了.它会把我们之前的大量工作浓缩成为一个.或者多个文件.接下来,运维的同学就可以拿着这些个打包文件在生产上纵横四海了. 这么一项庄 ...

  3. JVM系列之一 JVM的基础概念与内存区域

    前言 作为一名 Java 语言的使用者,学习 JVM 有助于解决程序运行过程中出现的问题.写出性能更高的代码. 可以说:学好 JVM 是成为中高级 Java 工程师的必经之路. 有感于从未整理归纳 J ...

  4. Prettier All In One

    Prettier All In One .prettierrc.js / .prettierrc / .prettierrc.json module.exports = { singleQuote: ...

  5. Web 全栈开发 Redis 面试题

    Web 全栈开发 Redis 面试题 Redis 大 key 问题 https://www.cnblogs.com/xgqfrms/p/13601959.html Redis 数据结构 Redis 初 ...

  6. leetcode best solutions

    leetcode best solutions how to learning algorithms form the leetcode best solutions https://leetcode ...

  7. Typescript & classes & public shorthand

    classes & public shorthand Also of note, the use of public on arguments to the constructor is a ...

  8. DMCA Takedown Policy

    DMCA Takedown Policy https://github.com/xgqfrms/xgqfrms/issues/46 https://help.github.com/en/github/ ...

  9. 什么是USDN稳定币?USDN的应用价值是什么?

    9月22日,美国货币监理署(OCC)发布了一项稳定币指南,主要内容围绕的是稳定币的监管及相关规定.一时间,稳定币得到了市场上广泛的关注.那么,什么是稳定币呢?什么又是USDN稳定币呢? 1.什么是稳定 ...

  10. 记一个关于std::unordered_map并发访问的BUG

    前言 刷题刷得头疼,水篇blog.这个BUG是我大约一个月前,在做15445实现lock_manager的时候遇到的一个很恶劣但很愚蠢的BUG,排查 + 摸鱼大概花了我三天的时间,根本原因是我在使用s ...