В Qt метод drawPoint ничего не отображает, если поставляются отрицательные параметры
В Qt creator метод drawPoint() не ставит точку, если передаются отрицательные значения, следующий код для алгоритма Брезенхэма. Но он не работает в 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);
}
1 ответ
Решение
Вам нужно перевести систему координат 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 );