Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDebug>
- #include <QPen>
- #include <QString>
- #include <algorithm>
- #include "mathfunc.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- bool MainWindow::sort_pred(QPoint a, QPoint b){
- int Cx = centroid.x();
- int Cy = centroid.y();
- return angle(Cx, Cy, a.x(), a.y()) < angle(Cx, Cy, b.x(), b.y());
- }
- //Добавляем точки, каждый раз пересчитывая центроид
- void MainWindow::mousePressEvent(QMouseEvent *e){
- int x = e->x();
- int y = e->y();
- int Cx = 0;
- int Cy = 0;
- points.append(QPoint(x,y));
- for(int i = 0; i < points.size(); i++){
- Cx = Cx + points[i].x();
- Cy = Cy + points[i].y();
- }
- Cx = Cx / points.size();
- Cy = Cy / points.size();
- centroid.setX(Cx);
- centroid.setY(Cy);
- update();
- }
- void MainWindow::paintEvent(QPaintEvent *e){
- QPainter p(this);
- p.setPen(QPen(Qt::blue, 3));
- //Рисуем точки
- for(int i=0; i<points.size(); i++)
- p.drawPoint(points[i]);
- p.setPen(QPen(Qt::red, 3));
- //Отмечаем центроид системы точек
- p.drawPoint(centroid);
- //Каждую точку подписывает ее углом относительно центроида
- for(int i=0; i<points.size(); i++){
- double a = angle(centroid.x(), centroid.y(), points[i].x(), points[i].y());
- p.drawText(points[i].x(), points[i].y(), QString::number(a));
- }
- //Соединяем точки линией
- QPen pen(Qt::black);
- pen.setWidth(1);
- p.setPen(pen);
- std::sort(points.begin(), points.end(), sort_pred);
- for(int i=0; i<points.size()-1; i++){
- p.drawLine(points[i], points[i+1]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment