计算机图形学中直线的生成算法
发布网友
发布时间:2022-04-28 19:39
我来回答
共2个回答
热心网友
时间:2023-09-14 16:46
/* DDA算法 */
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd,&gm,"");
}
void DDALine(int x0,int y0,int x1,int y1,int color)
{
int x;
float dx,dy,y,k;
dx=x1-x0 ;
dy=y1-y0;
k=dy/dx;
y=y0;
for(x=x0;x<=x1;x++)
{
putpixel(x,(int)(y+0.5),color);
y=y+k;
}
}
main()
{initgr(); /* BGI初始化 */
DDALine(100,100,200,200,6) ;
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
}
热心网友
时间:2023-09-14 16:46
/DDA (Digital Differential Analyzer)法 即 数值微分法 /
想法思路:
对于具有斜率|k|<1的线段,可以让x从起点到终点计算,x方向每增加(或减少)1像素,即令x=x+1(或x=x-1),则y方向增加(或减少)k像素,即y=y+k(或y=y-1)
代码
//起点(x1,y1) , 终点( x2,y2) ,像素颜色color
void DDAline(int x1 ,int y1,int x2,int y2,int color)
{
int x;
float k,y=y1;
k=1.0 * (y2-y1)/(x2-x1); //斜率 k
for( x=x1;x<=x2;x++)
{
putpixel( x, , color); //对floor y 四舍五入取整 (int)(y+0.5)
y=y+k;
}
}