drawPoint()方法不会指向 以下是Bresenham算法的代码。但是,它不适用于qt creator.it只是在一个象限中绘制圆圈。
Bresenham::Bresenham(QWidget*parent):QWidget(parent)
{}
void Bresenham::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
QPainter qp(this);
drawPixel(&qp);
}
void Bresenham::drawPixel(QPainter *qp)
{
QPen pen(Qt::red,2,Qt::SolidLine);
qp->setPen(pen);
int x=0,y,d,r=100;
y=r;
d=3-2*r;
do
{
qp->drawPoint(x,y);
qp->drawPoint(y,x);
qp->drawPoint(y,-x);
qp->drawPoint(x,-y);
qp->drawPoint(-x,-y);
qp->drawPoint(-y,-x);
qp->drawPoint(-x,y);
qp->drawPoint(-y,x);
if(d<0)
{
d=d+4*x+6;
}
else
{
d=d+(4*x-4*y)+10;
y=y-1;
}
x=x+1;
}while(x<y);
}
答案 0 :(得分:0)
您需要将Qt坐标系转换为经典的笛卡尔坐标系。选择一个新的中心QPoint orig
并替换所有
qp->drawPoint(x,y);
与
qp->drawPoint(orig + QPoint(x,y));
Qt coordinates system原点位于(0,0)
,y轴反转。例如,从A(2,7)
到B(6,1)
的细分如下:
注意如何只有正x,正y象限。为简单起见,假设没有负坐标。
注意:强>
出于性能原因,最好先计算所有点,然后使用
绘制所有点QPainter::drawPoints ( const QPoint * points, int pointCount );