在计算机图形学中,我们需要使用离散像素表示连续图形对象。这个过程称为扫描转换。每个图形系统都必须将线、圆和椭圆等图元转换为像素集合。
线条绘制算法用于在离散图形介质中绘制线条。计算机图形学中有三种线描算法。
Bresenham的线算法是乐观的&;增量扫描转换线绘制算法,计算起点和终点之间的所有中间点,完全使用整数和整数算法实现。它只使用加法和减法,避免了乘法和除法等繁重的运算。
Bresenham线绘制算法确定应选择的n维光栅的点,以便形成两点之间直线的近似。
它通常用于在位图图像(例如在计算机屏幕上)中绘制线基元,因为它仅使用整数加法、减法和位移位,所有这些都是常用计算机指令集(如x86_64)中非常廉价的操作。它是一种增量错误算法。它是计算机图形学领域最早开发的算法之一。原始算法的扩展可用于绘制圆。
步骤1:启动算法
步骤2:声明变量x1、x2、y1、y2、d、i1、i2、dx、dy
步骤3:输入x1、y1、x2、y2的值,其中x1、y1为起点坐标,x2、y2为终点坐标
步骤4:计算dx=x2-x1计算dy=y2-y1计算i1=2*dy计算i2=2*(dy-dx)计算d=i1-dx
步骤5:考虑(x,y)作为起点,XENDA是x的最大可能值;如果dx>;0,则x=x1,y=y1,xend=x2
步骤6:在(x,y)坐标处生成一个点。
步骤7:检查是否生成整行。如果x>;=停下来。
步骤8:如果d<;如果d为0,则d=d+i1≥ 0,则d=d+i2增量y=y+1
第9步:增量x=x+1
步骤10:绘制最新(x,y)坐标点
步骤11:转到步骤7
步骤12:算法结束
DDA代表数字微分分析仪。这是一种增量线算法,每一步的计算都基于前面步骤的结果。DDA算法沿一个坐标采取单位步长,并沿另一个坐标计算相应的值。
DDA用于线、三角形和多边形的光栅化。它们可以扩展到非线性函数,如透视校正纹理映射、二次曲线和遍历体素。
线性DDA从计算dy或dx中较小的一个开始,另一个的单位增量。然后在一个坐标中以单位间隔对线进行采样,并为另一个坐标确定最接近线路径的相应整数值。
步骤1:启动算法
第二步:将x1、y1、x2、y2、dx、dy、x、y声明为整数变量。
步骤3:输入x1、y1、x2和y2的值。
步骤4:计算dx=x2-x1
步骤5:计算dy=y2-y1
步骤6:如果ABS(dx)>;ABS(dy)则步骤=ABS(dx)否则
步骤7:xinc=dx/步骤yinc=dy/步骤分配x=x1分配y=y1
步骤8:设置像素(x,y)
步骤9:x=x+xinc y=y+yinc设置像素(圆(x),圆(y))
步骤10:重复步骤9,直到x=x2
步骤11:结束算法
Also Read: Difference Between Deterministic And Non-deterministic Algorithms
比较基础 | DDA算法 | BRESENHAM算法 |
描述 | DDA代表数字微分分析仪。 | ——- |
操作 | DDA算法在其运算中使用乘法和除法。 | Bresenham的算法在运算中只使用减法和加法。 |
功能 | DDA算法不如Bresenham算法准确和高效。 | Bresenham算法比DDA算法更精确和高效。 |
算术 | DDA算法使用浮点,即实运算。 | Bresenham算法使用不动点,即整数算术。 |
圆满 | DDA算法将坐标四舍五入为最接近直线的整数。 | Bresenham的算法不舍入,而是在其操作中采用增量值。 |
绘画 | DDA算法可以绘制精度较低的圆和曲线。 | Bresenham算法可以更精确地绘制圆和曲线。 |
速度 | DDA算法比Bresenham算法慢,因为它使用实算术浮点运算。 | Bresenham算法比DDA算法更快,因为它使用整数算法。 |
复杂性 | 在DDA算法中,计算复杂度更高。 | 在Bresenham算法中,计算复杂度很简单。 |
费用 | DDA算法比Bresenham算法成本更高。 | Bresenham算法比DDA算法便宜。 |
Also Read: Difference Between Prim’s And Kruskal’s Algorithm
Also Read: Difference Between RSA And DSA Algorithm
...应路由算法 5. 摘要 什么是自适应路由算法(adaptive routing algorithms)? 动态路由或自适应路由使用自适应算法。这些算法根据拓扑结构和网络流量改变路由决策。相邻路由器或所有路由器提供路由信息。主要的优化参数是一些跳数...
... 图06:后期装订主程序 根据上面的程序,类形状有一个绘制方法。类圆类和三角形类扩展了形状类。因此,这两个类可以继承Shape类的属性和方法。Shape类是基类。类是派生类和圆类。类圆和类三角形也有自己的实现的draw方法...
...列比较-算法与表格形式的流程图 6. 摘要 什么是算法(an algorithm)? 每一个任务都是根据一个算法来完成的。如果Facebook有一个这样的问题,那么它将如何在一个日志中出现。首先,用户应该打开浏览器。然后他应该输入正确的网...
...写中。指用Java编写的程序。 公共类形状(){ 公共无效绘制(){ System.out.println(“绘制”); } } 公共类Circle()扩展形状{ 公共无效绘制(){ System.out.println(“画圆”); } } 公共类Triangle()扩展形状{ 公共无效绘制(){ S...
简单来说,伪代码是一种描述算法逻辑的叙述。 伪代码不是可执行代码,因此不必使用精确的语法;但是,遵循业界广泛使用的标准是很有帮助的,解决方案团队可以很容易地理解该标准。 统一建模语言(UML)和其他业务...
...、搜索、排序、分治、传统算法 什么是遗传算法(genetic algorithm)? 遗传算法是指基于遗传和自然选择的一类算法。这与物种适应环境变化并能够生存的过程相似。换句话说,它是建立在生物进化的基础上的。 此外,该算法不断...
...之前,他必须在几分钟内检查流程图。 什么是算法(an algorithm)? 算法是一个定义良好的逐步过程,用于处理数据(为特定问题提供解决方案)。Analogrithm准确地定义了程序执行操作所需的步骤。它包括输入、输出和逻辑...
...点上。 4设置曲线的起点和坡度。单击并将光标拖动到直线的弧线方向,到达曲线顶部后释放鼠标。释放光标的点是曲线顶点将到达的点。 5创建曲线的第二个点。单击并按住希望线从初始起点连接的点,然后沿与设置坡度时...
方法1方法1/2:绘制正面布雷艇 1在书页中央画一个小正方形作为页眉。 2.从上面画的方形主体的两侧延伸两条垂直线。将一对垂直的腿连接到上面——一条比另一条短,用于折叠的腿。 3在盒子上加一个屋顶和四个倾斜的正方...
...大小。画长边大约是短水平线的1 1/2倍。不要为矩形绘制直线,而是使直线呈波浪状且不规则。使海绵头底部比顶部略窄。波浪状的长方形看起来像海绵的轮廓。 2在弯曲矩形的底部绘制一个矩形。要勾勒海绵宝宝躯干的轮廓,...