DDA(数值微分法)绘制直线(C++,VS2019)

1、DDA(Digital Differential Analyzer)算法

DDA算法是计算机图形学中最简单的绘制直线算法。
已知直线段两个端点P0(x0,y0),P1(x1,y1)
则可求得直线的斜率:

  k = (y2 - y1) / (x2 - x1)

在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。

  y = kx + b

如果横坐标x每次增加1(我们称其为步进为1,即x = x +1),那么y的步进就为k+b。

  x = x + 1
  y = y + (k + b)

同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。

   y = y + 1
   x = x +(1 - b) / k

根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。

为进一步简化计算,通常可令b取0,将起点看作(0,0)。
设当前点的坐标为(xi ,yi),下一个像素点的坐标为(xi+1,yi+1)
则用DDA算法求解(xi+1,yi+1)的计算公式可以概括为:

xi+1 = xi + xStep (1)
yi+1 = yi + yStep (2)

我们一般通过计算 Δx 和 Δy 来确定xStep和yStep:

如果 Δx > Δy ,说明x轴的最大差值大于y轴的最大差值,x轴方向为步进的主方向,

xStep = 1,yStep = k;

如果 Δy> Δx,说明y轴的最大差值大于x轴的最大差值,y轴方向为步进的主方向,

yStep = 1,xStep = 1 / k。

根据这个公式,就能通过(xi,yi)迭代计算出(xi+1、yi+1),然后在坐标系中绘制计算出的(x,y)坐标点。

实现工具:
1) VS2019(C++)

新建项目:
在这里插入图片描述
2) 下载插件:Easyx 。使用方法和下载见官网: https://www.easyx.cn/
点击下载后安装在这里插入图片描述
在VC2019处点击安装

在这里插入图片描述
源代码如下:

#include <iostream>
#include <graphi
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值