图形学请教

chenggm 2005-06-23 01:41:14
我刚刚用DDA方法编了个直线的程序,我通过了编译,我输入坐标后就是没有图象出来,不知道是什么原因?是不是有逻辑错误?请各位高手了指教!!
程序如下:
#include<graphics.h>
#include<stdio.h>
main()
{
int driver,mode;
driver=VGA;
mode=VGAHI;
initgraph(&driver,&mode,"");
int x0,y0,x1,y1,x,y,color;
float dx,dy,k;
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
dx=x1-x0;
dy=y1-y0;
k=dy/dx;
y=y0;
for(x=x0;x<=x1;x++)
{
putpixel( x,y,color);
y=y+k*(x1-x0);
}

}
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chupyun 2005-06-23
  • 打赏
  • 举报
回复
观注中
andyred 2005-06-23
  • 打赏
  • 举报
回复
贴个完整的算法给你:

void DDA_Line(int x0, int y0, int x1, int y1, long color)
{
float k,x,y;
int dx,dy,i,s1,s2;
int flag;
dx = fabs(x1 - x0);
dy = fabs(y1 - y0);
s1 = x1 - x0>0?1:-1;
s2 = y1 - y0>0?1:-1;
if(dy>dx)
flag = 1;
else
flag = 0;
if(flag==0)
k = float(dy)/dx;
else
k = float(dx)/dy;
x = x0;
y = y0;

if(flag == 0)
{
k = k*s2;
for(i=1; i<=dx; i++)
{
putpixel(x,y+0.5*(y>0?1:-1),color);
x = x + s1;
y = y + k;
}
}
else
{
k = k*s1;
for(i=1; i<=dy; i++)
{
putpixel(x+0.5*(x>0?1:-1),y,color);
x = x + k;
y = y + s2;
}
}
}
andyred 2005-06-23
  • 打赏
  • 举报
回复
另外,如果你看到的是黑屏,那可能是因为 color没附值 的原因,如果什么也没看到就可能是上面的原因。还有,一般应该在main函数的最后加上,getchar()以便在看到结果后敲任意键结束
ltc_mouse 2005-06-23
  • 打赏
  • 举报
回复
for(x=x0;x<=x1;x++)
{
putpixel( x,y,color);
y=y+k*(x1-x0); /////这里有问题
}

应该是: y = y0 + k * (x-x0) ;
andyred 2005-06-23
  • 打赏
  • 举报
回复
initgraph(&driver,&mode,"");的第三个参数应该指定文件egavga.bgi的路径,如该文件在c:\tc下,则对应的参数应该是:"C:\\TC"
估计应该是这个问题,运行后你可以用ALT+F5查看到该错误信息
andyred 2005-06-23
  • 打赏
  • 举报
回复
initgraph(&driver,&mode,"");的第三个参数应该指定文件egavga.bgi的路径,如该文件在c:\tc下,则对应的参数应该是:"C:\\TC"
估计应该是这个问题,运行后你可以用ALT+F5查看到该错误信息
rick29 2005-06-23
  • 打赏
  • 举报
回复
color?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧