|
|
发表于 2005-10-6 05:55:00
|
显示全部楼层
Re:请问哪位知道VC下用DirectX画直线是怎么做的?
//**************************************************
//作者:杨文鸽 QQ:95852992 TZ_WENGE@163.COM
// int game::BLines() //求出2点间的路径放入path中
// 删除选 中的gno号对象。
//**************************************************
int game::Blines (int x0, int y0, int x1, int y1,int q,int zy1,int sd)
{
//wi=0;
int fx=0;
//fx=fw(x0,y0,x2,y2,zx,zy); //直接取方向,在内部放入全局变量FX中,并初始开始路径点WI!!!
int x, y, dx, dy,i,w,zx,zy;
int e;
//x1=x2-zx1;y1=y2-zy1;
x = abs(x1-x0);
y = abs(y1-y0);
dx = (x1-x0);
dy = (y1-y0);
if (x==0) //在Y轴上
{ for(i=1;i<=sd;i++)
//i=1;
{
path.x=x0;
path.y=y0+y/dy*i;
}
if(abs(x0-path[sd].x)>=x&&abs(y0-path[sd].y)>=y) {path[sd].x=x1;path[sd].y=y1;}
return i;
}
if (y==0) //在X轴
{ for(i=1;i<=sd;i++)
{
path.y=y0;
path.x=x0+x/dx*i;
}
if(abs(x0-path[sd].x)>=x&&abs(y0-path[sd].y)>=y) {path[sd].x=x1;path[sd].y=y1;}
return i;
}
//求在正直角的斜边
if (x==y)
{
for(i=1;i<=sd;i++)
//i=1;
{
path.x=x0+x/dx*i;
path.y=y0+y/dy*i;;
}
return i;
}
zx = abs(dx);
zy = abs(dy);
if (zx<zy)//如果X小于y即在别区内,就进行交换使Y<X
{
w=zx;zx=zy;zy=w;
}
e = -1*zx;
//进行计算《1的直线
i=zx;
y=0;
//预先判断好是属于什么区(8区中)
if (dy>0&&dx>0)//1
{
if (abs(dy)<abs(dx))
{ w=1;
}
else
{ w=2;
};
}
if (dx<0&&dy>0)//2
{
if (abs(dy)<abs(dx))
{ w=3;
}
else
{ w=4;
};
}
if (dx<0&&dy<0)//3
{
if (abs(dy)<abs(dx))
{
w=5;
}
else
{ w=6;
};
}
if (dx>0&&dy<0) //4
{
if (abs(dy)<abs(dx))
{ w=7;
}
else
{ w=8;
};
}
//从这儿开始取是否加1的处理的判断
for (x=1;x<=sd;x++)
{
//x++;
e +=2*zy;
if (e>=0)
{
y++;
e-=2*zx;
}
if (w==1)
{ path[x].x=x0+x;
path[x].y=y0+y;
}
if (w==2)
{ path[x].x=x0+y;
path[x].y=y0+x;
};
if (w==3)
{ path[x].x=x0-x;
path[x].y=y0+y;
}
if (w==4)
{ path[x].x=x0-y;
path[x].y=y0+x;
};
if (w==5)
{ path[x].x=x0-x;
path[x].y=y0-y;
}
if (w==6)
{ path[x].x=x0-y;
path[x].y=y0-x;
};
if (w==7)
{ path[x].x=x0+x;
path[x].y=y0-y;
}
if (w==8)
{ path[x].x=x0+y;
path[x].y=y0-x;
};
}
return i;
} |
|