文档介绍:实验一、直线生成算法
DDA画线算法
一 .名称:DDA画线算法;
二 . 算法分析:
:P1(x1,y1)及 P0(x0,y0),
k<1 , x每增加1,y 最多增加1(或增加小于1)。
yi
xi
yi+1
xi+1
k>1 ,y每增加1,x 最多增加1 (或增加小于1) 。
三.算法实现:
void CHuayahuaView::OnDda() //DDA画直线
{
// TODO: Add your command handler code here
CDC* pdc1 = GetDC();
int color = RGB(255,0,0);
int x1=10,y1=20,x2=200,y2=200;
double k=(y2-y1)*/(x2-x1);//k<1;
double y=y1;
for(int i=x1;i<=x2;i++)
{
pdc1->SetPixel(i,(int)(y+),color);
y=y+k;
}
ReleaseDC(pdc1);
}四:程序截图:
中点画线算法
实验名称:中点画线算法
算法分析:
y
x
F(x,y)=0
F(x,y)>0
F(x,y)<0
(x1,y1)
(x0,y0)
直线方程: F(x,y)=ax+by+c=0
直线将二维空间划分为三个区域:
如F(x,y)=0, 则(x,y) 在直线上
如F(x,y)<0, 则(x,y)在直线下方
如F(x,y)>0, 则(x,y)在直线上方
条件: a= -(y1-y0)
b=(x1-x0)
c= -B(x1-x0)
代码实现:
void CHuayahuaView::MidPointLine()
{
// TODO: Add your command handler code here
CDC* pdc1 = GetDC();
int color = RGB(255,0,0);
int x1=30,y1=50,x2=200,y2=100;//斜率;
int x,y,a,b,d,d0,d1,d2;
a=y2-y1;
b=x2-x1;
d=2*a+b;
d1=2*a;
d2=2*(a+b);
x=x1,y=y1;
pdc1->SetPixel(x,(int)(y+),color);
while(x < x2)
{
if(d>0)
{
x++;
y++;
d+=d2;
}
else
{
x++;
d+=d1;
}
pdc1->SetPixel(x,(int)(y+),color);
}
ReleaseDC(pdc1);
}
程序截图:
Bresenham画线算法
算法名称:Bresenham画线算法
算法分析:
定义决策变量 d = d