From 66b3828254adf07a6df4d79f497a7f70fc8006f7 Mon Sep 17 00:00:00 2001 From: thepra Date: Mon, 28 Aug 2017 12:32:05 +0200 Subject: [PATCH] code handles curves dinamically --- renderarea.cpp | 95 +++++++++++++++++++++++++++++++++++--------------- renderarea.h | 14 +++++--- 2 files changed, 77 insertions(+), 32 deletions(-) diff --git a/renderarea.cpp b/renderarea.cpp index d65a863..9f7a2a7 100644 --- a/renderarea.cpp +++ b/renderarea.cpp @@ -6,13 +6,28 @@ RenderArea::RenderArea(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::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}; +QPointF RenderArea::ComputeHuygens(double t) +{ + +} + +QPointF RenderArea::ComputeHypo(double t) +{ + } QSize RenderArea::minimumSizeHint() const @@ -30,40 +45,64 @@ 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); + double step{ mIntervalLenght / mStepCount }; + + for(float t = 0; t < mIntervalLenght; t += step){ + QPointF point = Compute(t); QPoint pixel; - pixel.setX(point.x() * scale + center.x()); - pixel.setY(point.y() * scale + center.y()); + 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}; +} diff --git a/renderarea.h b/renderarea.h index fa1ef0c..d62bef1 100644 --- a/renderarea.h +++ b/renderarea.h @@ -21,7 +21,7 @@ class RenderArea : public QWidget void setBackgroundColor(QColor color) { mBackgroundColour = color; } QColor backgroundColor() const { return mBackgroundColour; } - void setShape(ShapesType shape) { mShape = shape; } + void setShape(ShapesType shape) { mShape = shape; OnShapeChanged(); } ShapesType shape() const { return mShape; } @@ -33,9 +33,15 @@ class RenderArea : public QWidget public slots: private: - QPointF ComputeAstroid(float t); - QColor mBackgroundColour; - QColor mShapeColour; + void OnShapeChanged(); + QPointF ComputeAstroid(double t); + QPointF ComputeCycloid(double t); + QPointF ComputeHuygens(double t); + QPointF ComputeHypo(double t); + QPointF Compute(double t); + QColor mBackgroundColour,mShapeColour; ShapesType mShape; + double mScale,mIntervalLenght; + int mStepCount; }; #endif // RENDERAREA_H