📄 limingline.h
字号:
#include "math.h"
#include "windows.h"
class limingline
{
public:
void DDA(CDC*pDC,int xa,int ya,int xb,int yb, int m_red,int m_green,int m_blue);
void MID(CDC *pDC,int xa,int ya,int xb,int yb,int m_red,int m_green,int m_blue);
void Bresenham(CDC *pDC,int x1,int y1,int x2,int y2,int m_red,int m_green,int m_blue);
};
void limingline::DDA(CDC *pDC,int xa,int ya,int xb,int yb,int m_red,int m_green,int m_blue)
{
int c=RGB(m_red,m_green,m_blue);
int x,y;
float dx,dy,k;
dx=(float)(xb-xa),dy=(float)(yb-ya);
k=dy/dx,y=ya;
if(abs(k)<1)
{
for(x=xa;x<=xb;x++)
{
pDC->SetPixel(x,int(y+0.5),c);
y=y+k;
}
}
else if(abs(k)>=1)
{
for(y=ya;y<=yb;y++)
{
pDC->SetPixel(int(x+0.5),y,c);
x=x+1/k;
}
}
}
void limingline::MID(CDC *pDC,int xa,int ya,int xb,int yb,int m_red,int m_green,int m_blue)
{
int c=RGB(m_red,m_green,m_blue);
float a,b,d1,d2,d,x,y;
a=(float)(ya-yb),b=(float)(xb-xa),d=2*a+b;
d1=2*a,d2=2*(a+b);
x=(float)xa,y=(float)ya;
pDC->SetPixel((int)x,(int)y,c);
while(x<xb)
{
if(d<0)
{
x++,y++,d+=d2;
}
else
{
x++,d+=d1;
}
pDC->SetPixel((int)x,(int)y,c);
}
}
void limingline::Bresenham(CDC *pDC,int x1,int y1,int x2,int y2,int m_red,int m_green,int m_blue)
{
int c=RGB(m_red,m_green,m_blue);
int i,s1,s2,interchange;
float x,y,deltax,deltay,f,temp;
x=(float)x1;
y=(float)y1;
deltax=abs(x2-x1);
deltay=abs(y2-y1);
if(x2-x1>=0) s1=1;
else s1=-1;
if(y2-y1>=0) s2=1;
else s2=-1;
if(deltay>deltax)
{
temp=deltax;
deltax=deltay;
deltay=temp;
interchange=1;
}
else
interchange=0;
f=2*deltay-deltax;
pDC->SetPixel(x,y,c);
for(i=1;i<=deltax;i++)
{
if(f>=0)
{
if(interchange==1)
x+=s1;
else
y+=s2;
pDC->SetPixel(x,y,c);
f=f-2*deltax;
}
else
{
if(interchange==1)
y+=s2;
else
x+=s1;
f=f+2*deltay;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -