Qt实现中点画线算法

这篇博客详细介绍了如何在Qt环境下使用中点画线算法来绘制直线。通过设定直线方程,根据斜率大于0小于1的情况,计算每个中点的位置,并根据中点在直线的上下方来确定实际绘制的点。通过递推公式实现算法,确保在整数坐标的计算机画图中精确描绘直线。
摘要由CSDN通过智能技术生成

前提:计算机画图只能在整数坐标上画图,即点(x , y)x , y均为整数
首先 说下取值规律:
这里写图片描述
如图所示
在图中有一个点( 2 , 1.5 )。设实际需要描的点的坐标为(2 , y )
如果1<y≤1.5,则令y=1;
如果1.5<y≤2,则令y=2;

接下来
这里我取斜率大于0小于1的情况进行具体分析

根据直线表达式,我们可以设该直线为:
ax+by+c=0,令a=y1-y2;b=x2-x1;
令f(x,y)=ax+by+c
则我们可知 : 当x=x1,y=y1时,f(x1,y1)=a*x1+b*y1+c=0
然后取x1下一个位置的中点,即点(x1+1,y1+0.5)
f(x1+1,y1+0.5)
=a(x1+1)+b(y1+0.5)+c
=ax1+by1+c+a+0.5*b
=a+0.5*b
接下来就要进行判断:
(一)当a+0.5*b≥0时,中点在直线的上方,即实际点的纵坐标比中点小,则令该点坐标为( x1+1 , y1 );
下一点的中点坐标为(x1+2,y1+0.5)
f(x1+2,y1+0.5)
=a(x1+2)+b(y1+0.5)+c
=ax1+by1+c+2*a+0.5*b
=(a+0.5*b)+a
(二)当a+0.5*b<0时,中点在直线的下方,即实际点的纵坐标比中点大,则令该点坐标为( x1+1 , y1+1 );
下一点的中点坐标为(x1+2,y1+1.5)
f(x1+2,y1+1.5)
=a(x1+2)+b(y1+1.5)+c
=ax1+by1+c+2*a+1.5*b
=(a+0.5*b)+(a+b)
令d0=a+0.5*b,d1=a,d2=a+b
则有递推式:
if(d0<0){
y++;
d0+=d2;
}else{
d0+=d1;
}
直接看代码吧:

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    // 设置画笔颜色
    painter.setPen(QColor(0, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值