Guest User

Untitled

a guest
Oct 20th, 2014
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QDebug>
  4. #include <QPen>
  5. #include <QString>
  6. #include <algorithm>
  7. #include "mathfunc.h"
  8.  
  9. MainWindow::MainWindow(QWidget *parent) :
  10.     QMainWindow(parent),
  11.     ui(new Ui::MainWindow)
  12. {
  13.     ui->setupUi(this);
  14. }
  15.  
  16. MainWindow::~MainWindow()
  17. {
  18.     delete ui;
  19. }
  20.  
  21. bool MainWindow::sort_pred(QPoint a, QPoint b){
  22.     int Cx = centroid.x();
  23.     int Cy = centroid.y();
  24.     return angle(Cx, Cy, a.x(), a.y()) < angle(Cx, Cy, b.x(), b.y());
  25. }
  26.  
  27. //Добавляем точки, каждый раз пересчитывая центроид
  28. void MainWindow::mousePressEvent(QMouseEvent *e){
  29.     int x = e->x();
  30.     int y = e->y();
  31.     int Cx = 0;
  32.     int Cy = 0;
  33.     points.append(QPoint(x,y));
  34.     for(int i = 0; i < points.size(); i++){
  35.         Cx = Cx + points[i].x();
  36.         Cy = Cy + points[i].y();
  37.     }
  38.     Cx = Cx / points.size();
  39.     Cy = Cy / points.size();
  40.     centroid.setX(Cx);
  41.     centroid.setY(Cy);
  42.     update();
  43. }
  44.  
  45. void MainWindow::paintEvent(QPaintEvent *e){
  46.     QPainter p(this);
  47.     p.setPen(QPen(Qt::blue, 3));
  48.     //Рисуем точки
  49.     for(int i=0; i<points.size(); i++)
  50.         p.drawPoint(points[i]);
  51.     p.setPen(QPen(Qt::red, 3));
  52.     //Отмечаем центроид системы точек
  53.     p.drawPoint(centroid);
  54.  
  55.     //Каждую точку подписывает ее углом относительно центроида
  56.     for(int i=0; i<points.size(); i++){
  57.         double a = angle(centroid.x(), centroid.y(), points[i].x(), points[i].y());
  58.         p.drawText(points[i].x(), points[i].y(), QString::number(a));
  59.     }
  60.  
  61.     //Соединяем точки линией
  62.     QPen pen(Qt::black);
  63.     pen.setWidth(1);
  64.     p.setPen(pen);
  65.  
  66.     std::sort(points.begin(), points.end(), sort_pred);
  67.     for(int i=0; i<points.size()-1; i++){
  68.         p.drawLine(points[i], points[i+1]);
  69.     }
  70.  
  71. }
Advertisement
Add Comment
Please, Sign In to add comment