2015-01-14 3 views
0

인 경우 Qt drawPoint 메서드에서 아무 것도 플롯하지 않음. 다음은 Bresenham의 알고리즘입니다. creator.it는 한 사분면에서 원을 그립니다.음수 값 매개 변수가 음수 값 매개 변수가 전달되는 경우 Qt 작성자 drawPoint() 메서드에서 음수 값 매개 변수가

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

Qt 좌표계를 고전적인 직교 좌표계로 변환해야합니다. 새로운 중심 선택 QPoint origQt coordinates system(0,0) 원점에 있고, y 축이 반전되는 모든

qp->drawPoint(x,y); 

qp->drawPoint(orig + QPoint(x,y)); 

교체. 예를 들어, A(2,7)에서 B(6,1)에 세그먼트는 다음과 같다 : 오직 긍정적 인-X, 긍정적 인-Y 사분면이 얼마나

enter image description here

공지 사항. 단순화를 위해 음수 좌표가없는 을 가정합니다.

참고 : 성능상의 이유로

먼저 모든 점을 계산 한 후

QPainter::drawPoints (const QPoint * points, int pointCount); 
+0

감사를 사용하여 그들 모두를 그리는 것이 좋습니다, 지금 일하고있어 – user3198176

+0

@ user3198176 안녕하세요. 이 질문이나 답변으로 문제가 해결되면 체크 표시를 클릭하여 [수락] (http://meta.stackexchange.com/q/5234/179419)을 고려하십시오. 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이 작업을 수행 할 의무가 없습니다. – UmNyobe