DDA画线算法

#include<stdio.h>

#include"graphics.h"

#include<math.h>

#include<stdlib.h>

void DDALine(int x0, int y0, int x1, int y1);

int main()

{

int gdriver = DETECT, gmode;

int x0, y0, x1, y1;

printf("please input the start point:\n");

scanf_s("%d%d", &x0, &y0);

printf("please input the end point:\n");

scanf_s("%d%d", &x1, &y1);

initgraph(&gdriver, &gmode, "");    //初始化图形界面

DDALine(x0, y0, x1, y1);

system("pause");    //暂停函数

closegraph();   //关闭图形界面

}

void DDALine(int x0, int y0, int x1, int y1)

{

int dx=x1-x0, dy=y1-y0,k;

double x = x0, y = y0, xIncre, yIncre, espl;

espl = abs(dy);

if (abs(dx) > abs(dy))

espl = abs(dx);

xIncre = 1.0*dx / espl;

yIncre = 1.0*dy / espl;

for (k = 0; k < espl;k++)

{

putpixel((int)x, (int)y, RED);

x += xIncre;

y += yIncre;

}

}

时间: 2024-10-05 04:40:49

DDA画线算法的相关文章

OpenGL实现DDA画线算法

数字微分分析仪(digital differential analyzer)方法是一种线段扫描转换算法. DDA算法比直接使用直线方程计算的速度更快,它利用光栅特性消除了直线方程种的乘法. 本代码参考自<计算机图形学>第四版,该函数将在verts末尾按次序添加需要的点坐标 inline int round(const float a){    return int(a + 0.5);} void GLApp::lineDDA(std::vector<glm::vec2> &

计算机图形学DDA画线法+中点画线法+Bresenham画线法

#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> void line1(){ line(100, 100, 200, 400); line(100, 400, 200, 100); line(0, 200, 300, 300); line(0, 300, 300, 200); } void lineDDA(int x0, int y0, int x1,

图形学_画线算法(DDA、Bresenham)

1. DDA算法实现直线绘制(需先安装easyx,百度下载即可) 1 #include "easyx.h" 2 #include "math.h" 3 #include "windows.h" 4 #include "stdio.h" 5 #include "stdlib.h" 6 #include "conio.h" 7 #include "graphics.h"

两种画线算法(DDA&amp;Bersenham)

DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = Yk + m   (m为由初始点确定的斜率) 对于斜率>1的线段 Xk+1 = Xk + 1/m   (m为由初始点确定的斜率) 起始端点在于右侧时 "+" -> "-" #include "stdlib.h" #include &qu

图形学--(中点画线法+Bresenham画线算法)

编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我们为什么不直接用直线方程分别带点再打亮呢,这是因为,计算机中每个坐标点都是整数,而直线是由一个个像素点组合而成的,那么,直接将坐标点再进行四舍五入整数化就好了啊,的确,这是一种方法,但计算机中进行浮点数的四舍五入会使运算效率变差,因此真正画直线时是用到上边这俩种方法的. 1.中点画线法 只考虑当直线

计算机图形学(二)输出图元_3_画线算法_1_直线方程

画线算法 场景中的直线段由其两端点的坐标位置来定义.要在光栅监视器上显示一线段,图形系统必须先将两端点投影到整数屏幕坐标,并确定离两端点间的直线路径最近的像素位置.接下来将颜色值装人帧缓存相应的像素坐标处.视频控制器从帧缓存读出写入的颜色值并绘制屏幕像素.这一过程将一线段数字化为一组离散的整数位置.一般而言,这些位置是实际线路径的近似.例如,计算出的线位置(10.48, 20.51)转换为像素位置(10, 21).坐标值舍入到整数,引起除水平和垂直以外所有线段的阶梯效应("锯齿形"),

Bresenham画线算法

[Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 参考:<计算机图形学>3.5.3 Bresenham画线算法 Bresenham画线算法

计算机图形学(二)输出图元_4_并行画线算法

并行画线算法 本来在word中是有右下数的,一编辑在csdn中编辑就没有了.                            上面讨论过的线段生成算法顺序地确定像素位置.而利用并行计算机,则可通过将计算分割到可用的多个处理器中来得到线段的像素位置.分割问题的一种解决方法是将现有的顺序算法放到多个处理器上.我们也可以寻找其他处理办法,从而使像素位置能以并行方式有效地计算.在设计并行算法中,重要的是要考虑平衡可用处理器间的处理负载. 给定np个处理器,我们可以通过把线段分割成np个子段,并在每

计算机图形学(二)输出图元_3_画线算法_3_Bresenham画线算法

Bresenham画线算法 本来在word中是有右下数的,一编辑在csdn中编辑就没有了.                         Bresenham画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用增量整数计算.另外Bresenham算法还可用于显示圆和其他曲线.图3.8和图3.9给出了绘制线段的屏幕局部.垂直轴表示扫描线位置,水平轴标识像素列.在这个例子中,我们以单位x间隔取样,并且需要确定每次取样时两个可能的像素位置中的哪一个更接近于线路径.从图3.