给定线段2端点(x1,y1),(x2,y2);
判断斜率以决定是x+1还是y+1以减小误差,即判断abs(dx)和abs(dy)的大小
1.steps = abs(dx)>abx(dy)?abs(dx):abx(dy);
2.xInstance = dx/steps;yInstance = dy/steps;
3.累加直到累加次数到steps;
over
#include <windows.h>
#include <math.h>
#define abs(dx) (dx>0)?(dx):(-dx)
struct Point
{
double x;
double y;
};
void DrawLine(Point a,Point b)//画线
{
double dx,dy,k,d,adx,ady,tempx,tempy;
HDC dc = GetWindowDC(GetDesktopWindow());
dx=b.x-a.x;
dy=b.y-a.y;
adx=abs(dx);
ady=abs(dy);
if(adx>ady)
{
k=adx;
}
else k=ady;
tempx=dx/k;
tempy=dy/k;
for(int i=0;i<adx;i++)
{
a.x+=tempx;
a.y+=tempy;
SetPixel(dc,a.x,a.y,RGB(0,0,0));
}
// system("pause");
}
int main()
{
HDC dc = GetWindowDC(GetDesktopWindow());
int k;
Point a={100,100},b={200,200};
while(1) DrawLine(a,b);
/* while(1)
for(int i=100;i<4600;i+=1)
{
double flag=(double)(i-100)/360*2*3.14;
k=sin(flag)*100+100;
SetPixel(dc,i,k,RGB(0,0,255));
}*/
}
DDA画线算法
最新推荐文章于 2022-04-24 16:00:08 发布