计算机图形学实验 直线的中点算法实现

计算机图形学实验 直线的中点算法实现

中点算法代码(部分)

void CMyView::OnMidpointline()
{
CDC* pDC=GetDC();
int xa=300, ya=200, xb=450, yb=300,c=RGB(0,255,0);
int a, b, d1, d2, d, x, y;
a=ya-yb, b=xb-xa, d=2a+b;
d1=2
a, d2=2* (a+b);
x=xa, y=ya;
pDC->SetPixel(x, y, c);
while (x<xb)
{ if (d<0) {x++, y++, d+=d2; }
else {x++, d+=d1;}
pDC->SetPixel(x, y, c);
}
ReleaseDC(pDC);
}

说明:

(1)其中 d 是 x p , y p 的线性函数。为了提高运算效率,程序中采用增量计算。具体算法如下:若当前像素处于 d>0 情况,则取正右方像素 P1(x p +1, y p ),判断下一个像素点的位置,应计算 d 1 =F(x p +2, y p +0.5)=a(x p +2)+b(y p +0.5)=d+a;其中增量为 a。若 d<0 时,则取右上方像素 P2(x p +1, y p +1)。再判断下一像素,则要计算 d 2 = F(x p +2, y p +1.5)=a(x p +2)+b(y p +1.5) +c=d+a+b,增量为 a+b。
(2) 画线从(x 0 , y 0 )开始,d 的初值 d 0 =F(x 0 +1, y 0 +0.5)=F(x 0 , y 0 )+a+0.5b,因 F(x 0 , y 0 )=0,则 d 0 =a+0.5b。
(3)程序中只利用 d 的符号,d 的增量都是整数,只是初始值包含小数,用 2d 代替 d,使程序中仅包含整数的运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值