#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
//n为循环的周期数,lineFlag为线型,x0,y0为起点坐标,线的总长度为n*21
void drawline(int n,int *lineFlag,int x0,int y0,COLORREF color) //点画线,短横线
{
for(int j=0;j<n;j++)
{
for(int i=0;i<21;i++)
{
if(lineFlag[i] == 1)
{
putpixel(x0,y0,color);
}
x0++;
}
}
}
void MidpointLine2(int x1,int y1,int x2,int y2,COLORREF color,int *lineFlag) //中点画线法
{
int count=0;
int x = x1, y = y1; //初始化x,y
int a = y1 - y2, b = x2 - x1; //a,b分别为x和y的增量
//考虑四种情况,分别计算增量
int deltx = (b >= 0 ? 1 : (b = -b, -1));
int delty = (a <= 0 ? 1 : (a = -a, -1));
for(int i=0;i<=400;i++)
{putpixel(i, 200, color);putpixel(200, i, color);}
if(lineFlag[count] == 1){putpixel(x+200, y+200, color);}count++;
int d, delt1, delt2;
if (-a <= b) // 斜率绝对值 <= 1
{
d = 2 * a + b;
delt1 = 2 * a;
delt2 = 2 * (a + b);
while(x != x2)
{
if (d < 0)
y += delty, d += delt2;
else
d += delt1;
x += deltx;
if(lineFlag[count] == 1){putpixel(x+200, y+200, color);}count++;
}
}
else // 斜率绝对值 > 1
{
d = 2 * b + a;
delt1 = 2 * b;
delt2 = 2 * (a + b);
while(y != y2)
{
if(d < 0)
d += delt1;
else
x += deltx, d += delt2;
y += delty;
if(lineFlag[count] == 1){putpixel(x+200, y+200, color);}count++;
}
}
}
int main()
{
initgraph(800,800);
int lineFlag1[]={1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0};
drawline(20,lineFlag1,50,100,255); //画点画线,长度为20*21
MidpointLine2(0,0,100,100,255,lineFlag1);
getchar();
return 0;
}
原文链接: https://www.cnblogs.com/XiaofeiYin/p/5563538.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/234672
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!