#include "renderarea.h" #include RenderArea::RenderArea(QWidget *parent) : QWidget{parent}, mBackgroundColour{36,35,35}, mShapeColour{251,250,250}, mShape{Astroid} { } QPointF RenderArea::ComputeAstroid(float t){ double cos_t{cos(t)},sin_t{sin(t)},x{2*cos_t*cos_t*cos_t},y{2*sin_t*sin_t*sin_t}; return QPointF{x,y}; } QSize RenderArea::minimumSizeHint() const { return QSize(100,100); } QSize RenderArea::sizeHint() const { return QSize(400,200); } void RenderArea::paintEvent(QPaintEvent* event) { QPainter painter{this}; painter.setRenderHint(QPainter::Antialiasing,true); switch (mShape) { case Astroid: mBackgroundColour = Qt::red; break; case Cycloid: mBackgroundColour = Qt::green; break; case HuygensCycloid: mBackgroundColour = Qt::blue; break; case HypoCycloid: mBackgroundColour = Qt::yellow; break; default: break; } painter.setBrush(mBackgroundColour); painter.setPen(mShapeColour); painter.drawRect(this->rect()); QPoint center{this->rect().center()}; int stepCount{1024}; double scale{40},intervalLenght{2 * M_PI},step{intervalLenght / stepCount}; for(float t = 0; t < intervalLenght; t += step){ QPointF point = ComputeAstroid(t); QPoint pixel; pixel.setX(point.x() * scale + center.x()); pixel.setY(point.y() * scale + center.y()); painter.drawPoint(pixel); } }