回复 1# xuchang1032 的帖子
可以具体点说明怎么操作吗?
计算机图形学上有画直线的函数,但是不完整
算法如下:
dda_line(float x1,float y1,float x2,float y2)
{//实数直线生成算法,有时不能准确达到终点,下一个算法更好
float x,y,n,t,dx,dy;
dx=x2-x1;
dy=y2-y1;
n=fabs(dx);
t=fabs(dy);
if(t>n)
n=t;
if(n!=0.0){
//计算叠加分量
dx=dx/n;
dy=dy/n;
}
x=x1+0.5;
y=y1+0.5;
x1=int(x);
y1=int(y);
x2=int(x2+0.5);
y2=int(y2+0.5);
n=fabs(x1-x2);
t=fabs(y1-y2);
if(t>n)
//计算画点的个数
n=t;
setcolor(255,0,0);
putpixel(x1,y1);
// 画直线的起点
setcolor(rr,gg,bb);
while(n>0) {
x=x+dx;
y=y+dy;
n=n-1;
putpixel(x,y);
}
}
//-----------------------------------------------
dda_line1(float x1,float y1,float x2,float y2)
{//实数直线1生成算法 ,能准确到达起点与终点,且直线宽度均匀,显示效果好
//而计算出的各个点,通过4舍5入,使其位于坐标网格点上
float x,y,n,t,dx,dy,dx1,dy1,dx2,dy2;
dx=x2-x1;
dy=y2-y1;
n=fabs(dx);
t=fabs(dy);
if(t>n)
n=t;
if(n!=0.0){
//计算理想条件下的叠加分量
dx1=dx/n;
dy1=dy/n;
}
n=int(n);
//计算画点的次数
//
dx2=dx-dx1*n;
//这样推算出的终点,有可能有较大的积累误差,舍弃这种方法
//
dy2=dy-dy1*n;
x=x1+0.5;
y=y1+0.5;
setcolor(255,0,0);
putpixel(x,y);
// 画直线的起点
setcolor(rr,gg,bb);
while(n>0) {
x=x+dx1;
y=y+dy1;
putpixel(x,y);
n--;
}
//
x=x+dx2;
//
y=y+dy2;
//
putpixel(x,y);
//一般能准确到达终点(但个别情况有2*E-5的误差),
putpixel(x2+0.5,y2+0.5);
//准确地画直线的终点
}
怎么才能写出完整的C++程序来呢?