Вращение графического примитива

294
11 ноября 2017, 13:39

Здравствуйте! Возникла такая проблема. Надо реализовать вращение такой фигуры

Набросал по быстрому код, изображение вертится, но первый сектор постепенно увеличивается и покрывает собой весь круг.

Как это исправить?

    float radius2;
    if (width() > height())
        radius2 = (height() - 100) / 2;
    else
        radius2 = (width() - 100) / 2;
    QPainter painter(this);
    QPointF center = QPointF(width() / 2, height() / 2);
    QRectF rect = QRectF(center.x() - radius2, center.y() - radius2, radius2*2, radius2*2);
    qreal fAngle = (2 * 180 )/8;
    qreal fAngle2 = fAngle;
    for (int i = 0; i < 8; i++) {
        if (i % 2 == 0) {
            painter.setBrush(QBrush(Qt::green));
            painter.drawPie(rect,fAngle*16*i + (angle/180.)*M_PI,fAngle2*16 + (angle/180.)*M_PI);
        }
    else {
            painter.setBrush(QBrush(Qt::blue));
            painter.drawPie(rect,fAngle*16*i + (angle/180.)*M_PI,fAngle2*16+(angle/180.)*M_PI);
        }
    }

angle изначально равно 0, увеличивается в этом событии

void MainWindow::timerEvent(QTimerEvent *event) {
    angle += 20;
    repaint();
}
Answer 1

Второй угол в функции drawPie это угол в основании сектора, а не угол "до которого рисовать", как ты, вероятно, предположил. см. http://doc.qt.io/qt-4.8/qpainter.html#drawPie . Соответственно, не нужно его увеличивать со временем.

painter.drawPie(rect,fAngle*16*i + (angle/180.)*M_PI,fAngle2*16);

READ ALSO
Помогите розвезать [требует правки]

Помогите розвезать [требует правки]

Решите пж Дано число nЧи вірно, що це число містить рівно 3 однакових цифри

304
Почему operator++ должен возвращать const T?

Почему operator++ должен возвращать const T?

Рассмотрим такой вариант реализации постфиксного оператора инкрементированияПочему требуется возвращать именно const T, а не T? Такой вариант...

211
Написать sqrt через ряды Тейлора с++

Написать sqrt через ряды Тейлора с++

Добрый день! Помогите, пожалуйста реализовать функцию квадратного корня из числа через ряд Тейлора на с++: Вот некоторые похожие рабочие...

491