在Qt创建者drawPoint()方法中,如果负值参数被传递给Bresenham的algorithm.but代码,则不加点,它不是在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);
}发布于 2015-01-14 09:17:12
您需要将Qt坐标系转换为经典的笛卡尔坐标系。选择一个新的中心QPoint orig并替换所有
qp->drawPoint(x,y); 使用
qp->drawPoint(orig + QPoint(x,y));Qt坐标系起源于(0,0),y轴倒置.例如,从A(2,7)到B(6,1)的一个段如下所示:

注意,这里只有正x,正y象限。为了简单起见,假设不存在负坐标.
注:
由于性能原因,最好先计算所有点,然后使用
QPainter::drawPoints ( const QPoint * points, int pointCount );https://stackoverflow.com/questions/27936238
复制相似问题