#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void timerEvent(QTimerEvent *);
void paintEvent(QPaintEvent *event);
private:
int m_x,m_y;
int m_k;
float m_t;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QDebug>
#include <math.h>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setFixedSize(600,600);
m_k = 10;
m_t = 0;
startTimer(1);
}
MainWindow::~MainWindow()
{
}
void MainWindow::timerEvent(QTimerEvent *)
{
qDebug() << "timer event " << m_t;
if (m_t > 500)
{
update();
m_t = 0;
}
m_x = 16 * m_k * sin(m_k*m_t)*sin(m_k*m_t)*sin(m_k*m_t);
m_y = 13 * m_k * cos(m_k*m_t) - 5 * m_k * cos(2 * m_k * m_t) - 2 * m_k * cos(3 * m_k * m_t) - cos(4 * m_k * m_t);
m_x += this->width() / 2;
m_y -= this->height() / 2;
m_y *= -1;
update(m_x,m_y,1,1);
m_t += 0.1;
}
#if 1
void MainWindow::paintEvent(QPaintEvent *event)
{
qDebug() << "paintEvent " << m_x << " " << m_y;
QPainter painter(this);
painter.setPen(Qt::red);
painter.drawPoint(m_x, m_y);
}
#else
void MainWindow::paintEvent(QPaintEvent *event)
{
double k = 10;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QColor my_color(237, 162, 255, 255);
QBrush my_brush(my_color);
painter.setPen(Qt::red);
/*painter.setBrush(my_brush);*/
painter.translate(this->width()/2, this->height()/2);
QPainterPath polygonPath;
polygonPath.setFillRule(Qt::WindingFill);
float x = 16 * k * sin(0.0)*sin(0.0)*sin(0.0);
float y = 13 * k * cos(0.0) - 5 * k*cos(0.0) - 2 * k*cos(0.0) - cos(0.0);
polygonPath.moveTo(x, -y);
for (double t = 0.01; t < 100; t += 0.05)
{
x = 16 * k * sin(k*t)*sin(k*t)*sin(k*t);
y = 13 * k * cos(k*t) - 5 * k * cos(2 * k * t) - 2 * k * cos(3 * k * t) - cos(4 * k * t);
polygonPath.lineTo(x, -y);
#if 0
painter.drawPoint(x,-y);
painter.drawLine(0,0,x,-y);
painter.drawLine(0,0,x+100,-y);
#endif
}
painter.drawPath(polygonPath);
}
#endif