现有函数SetPixel,能够设置画布上任意点的像素颜色,实现DrawLine函数,接受四个参数,前两个定义起点,后两个定义终点,并且在起点和终点之间绘制一条直线
实现方式:
通过
计算斜率,并且在对应的x、y偏移的坐标上设置像素点。此办法会有除0溢出,需要另外考虑。因此我使用了更简单直接的方法
设置步长为1,并且计算起点和终点的x、y坐标距离,分别计算其所需步数,选择一个最多或者最少的作为统一步数,在x、y方向上每步移动相应的距离,在移动完所有步数,正好绘制到终点
void DrawLine(int posX1,int posY1,int posX2,int posY2){
unsigned int step = 1;
int totalStep;
//int directX = posX2-posX1>0?1:posX2-posX1==0?0:-1;
//int directY = posY2-posY1>0?1:posY2-posY1==0?0:-1;
//选择步数最多的作为统一步数
if(Abs(posY2-posY1)>Abs(posX2-posX1)){
totalStep = Abs(posY2-posY1)/step;
}else{
totalStep = Abs(posX2-posX1)/step;
}
for(int i=0;i<totalStep;i+=1){
SetPixel(posX1+i*(posX2-posX1)/totalStep,posY1+i*(posY2-posY1)/totalStep,RGB(222,0,111));
}
}
按照步数最多(Abs(posY2-posY1)>Abs(posX2-posX1))生成的图像

按照步数最少(Abs(posY2-posY1)<Abs(posX2-posX1))生成的图像

对于直线绘制算法还有:数值微分算法(DDA算法) Bresenham画线法 中点分割算法