直线生成(DDA、中点、Bresenham)算法
2013-07-24 11:08
447 查看
#include <stdio.h> #include <graphics.h> void linedda(int x0,int y0,int x1,int y1,int color); void BresenhamLine(int x0,int y0,int x1,int y1); void MidPointLine(int x0,int y0,int x1,int y1,int color); main() { int a,b,c,d,e; int gdriver=DETECT; int gmode=0; initgraph(&gdriver,&gmode," "); cleardevice(); printf("\t DDA-Function\n"); printf("\tputin a,b,c,d,color:"); scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); linedda(a,b,c,d,e); getch(); cleardevice(); printf("\tBresenhamLine-Function\n"); printf("\tputin a,d,c,d:"); scanf("%d%d%d%d",&a,&b,&c,&d); BresenhamLine(a,b,c,d); getch(); cleardevice(); printf("\tMidPointLine-Function\n"); printf("\tputin a,b,c,d,color:"); scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); MidPointLine(a,b,c,d,e); getch(); closegraph(); } void linedda(int x0,int y0,int x1,int y1,int color) { int x,dy,dx,y; float m; dx=x1-x0; dy=y1-y0; m=dy/dx; y=y0; for(x=x0;x<=x1;x++) { putpixel(x,(int)(y+0.5),color); y+=m; } } void BresenhamLine(int x0,int y0,int x1,int y1) { int x,y,dx,dy,e; dx=x1-x0;dy=y1-y0; e=2*dy-dx;x=x0;y=y0; while(x<=x1) { putpixel(x,y,2); x++; e=e+2*dy; if(e<0) { e+=2*dy; } else{ y++; e=2*dy-dx; } } } void MidPointLine(int x0,int y0,int x1,int y1,int color) { int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=2*a+b; delta1=2*a; delta2=2*(a+b); x=x0;y=y0; putpixel(x,y,color); while(x<x1) { if(d<0) { x++;y++; d+=delta2; } else { x++; d+=delta1; } putpixel(x,y,color); } }
相关文章推荐
- DDA,中点算法生成直线
- 实验二 直线DDA生成算法的GDI实现
- 直线生成算法---对称DDA
- 【OpenGL】直线生成算法DDA+Bresenham
- 直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
- 直线生成算法---简单DDA
- 直线生成算法——数值微分法(Digital Differential Analyzer, DDA)
- 【Computer Graphics】2.直线生成算法(中点画线 算法)
- 直线的DDA生成算法C++实现
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
- 计算机图形学—DDA直线生成算法
- 直线生成 DDA
- 实验二 直线DDA生成算法的GDI实现
- 直线生成算法---DDA
- (4)直线的生成之中点画线法
- 直线生成算法---中点画线法
- 光栅图形学之直线段扫描算法(中点画线法之代码)
- 算法系列之十:直线生成算法 .
- 直线生成算法
- 图形学算法--DDA画直线