QtCurvesCpp/renderarea.cpp

109 lines
1.7 KiB
C++

#include "renderarea.h"
#include <QPainter>
RenderArea::RenderArea(QWidget *parent) :
QWidget{parent},
mBackgroundColour{36,35,35},
mShapeColour{251,250,250},
mShape{Astroid}
{
OnShapeChanged();
}
QPointF RenderArea::ComputeAstroid(double 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};
}
QPointF RenderArea::ComputeCycloid(double t)
{
}
QPointF RenderArea::ComputeHuygens(double t)
{
}
QPointF RenderArea::ComputeHypo(double t)
{
}
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);
painter.setBrush(mBackgroundColour);
painter.setPen(mShapeColour);
painter.drawRect(this->rect());
QPoint center{this->rect().center()};
double step{ mIntervalLenght / mStepCount };
for(float t = 0; t < mIntervalLenght; t += step){
QPointF point = Compute(t);
QPoint pixel;
pixel.setX(point.x() * mScale + center.x());
pixel.setY(point.y() * mScale + center.y());
painter.drawPoint(pixel);
}
}
void RenderArea::OnShapeChanged()
{
switch (mShape) {
case Astroid:
mScale=50;
mIntervalLenght=2*M_PI;
mStepCount=256;
break;
case Cycloid:
break;
case HuygensCycloid:
break;
case HypoCycloid:
break;
default:
break;
}
}
QPointF RenderArea::Compute(double t)
{
switch (mShape) {
case Astroid:
return ComputeAstroid(t);
break;
case Cycloid:
return ComputeCycloid(t);
break;
case HuygensCycloid:
return ComputeHuygens(t);
break;
case HypoCycloid:
return ComputeHypo(t);
break;
default:
break;
}
return QPointF{0,0};
}