在 Qt 中,如果提供负值参数,则 drawPoint 方法不会绘制任何内容
In Qt drawPoint method does not plot anything if negative valued parameters are supplies
如果传递负值参数,Qt creator 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);
}
您需要将 Qt 坐标系转换为经典的笛卡尔坐标系。选择一个新中心 QPoint orig
并替换所有
qp->drawPoint(x,y);
和
qp->drawPoint(orig + QPoint(x,y));
Qt coordinates system原点在(0,0)
,y-axis倒转。例如,从 A(2,7)
到 B(6,1)
的片段如下所示:
注意只有 positive-x、positive-y 象限。为简单起见,假设不存在负坐标。
注:
出于性能原因,最好先计算所有点,然后使用
绘制它们
QPainter::drawPoints ( const QPoint * points, int pointCount );
如果传递负值参数,Qt creator 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);
}
您需要将 Qt 坐标系转换为经典的笛卡尔坐标系。选择一个新中心 QPoint orig
并替换所有
qp->drawPoint(x,y);
和
qp->drawPoint(orig + QPoint(x,y));
Qt coordinates system原点在(0,0)
,y-axis倒转。例如,从 A(2,7)
到 B(6,1)
的片段如下所示:
注意只有 positive-x、positive-y 象限。为简单起见,假设不存在负坐标。
注:
出于性能原因,最好先计算所有点,然后使用
绘制它们QPainter::drawPoints ( const QPoint * points, int pointCount );