109 lines
1.7 KiB
C++
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};
|
|
}
|