Qt中按照逆时针给一组坐标排序
来源:互联网 发布:飞思卡尔arm编程软件 编辑:程序博客网 时间:2024/05/19 17:56
具体描述下这个问题:
经过切片的到一组无序的交点,有一组无序的离散坐标点,想让它们连接起来成为轮廓线,显示在qwtplot控件中;
网上有很多这样的算法程序,几乎清一色都是讲的凸多边形坐标排序,有一个关键点就是这些点不允许存在三点一线,否则输出的结果就不是正确的逆时针排序
http://www.cnblogs.com/dwdxdy/p/3230156.html 就是凸多边形排序
我自己的坐标点中,肯定存在三点一线的情况,以上的排序方法肯定不能满足要求,想想还有斜率可以用啊,是吧!
关键一点是,不要自己傻啦吧唧去写排序函数,现成的排序函数qSort干嘛不用
以多边形重心为准,计算点到重心的角度,按照角度的大小,对坐标排序
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QDebug>#include <cmath> #include <QtAlgorithms> //数据排序namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); QVector<QPointF> PointF; static bool cmp(QPointF a, QPointF b); //定义为静态,不然出错private: Ui::MainWindow *ui;};#endif // MAINWINDOW_Hmainwindow.cpp
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); PointF.append(QPointF(0,0)); PointF.append(QPointF(4,4)); PointF.append(QPointF(0,4)); PointF.append(QPointF(4,0)); PointF.append(QPointF(2,0)); PointF.append(QPointF(3,0)); PointF.append(QPointF(4,2)); //设定的测试点qDebug()<<atan2(PointF[0].y()-2,PointF[0].x()-2);qDebug()<<atan2(PointF[1].y()-2,PointF[1].x()-2);qDebug()<<atan2(PointF[2].y()-2,PointF[2].x()-2);qDebug()<<atan2(PointF[3].y()-2,PointF[3].x()-2);qDebug()<<atan2(PointF[4].y()-2,PointF[4].x()-2); qSort(PointF.begin(),PointF.end(),cmp); qDebug()<<PointF[0]<<PointF[1]<<PointF[2]<<PointF[3]<<PointF[4]<<PointF[5]<<PointF[6];}MainWindow::~MainWindow(){ delete ui;}bool MainWindow::cmp(QPointF a, QPointF b){ double d1 = atan2(a.y()-2,a.x()-2); double d2 = atan2(b.y()-2,b.x()-2); //atan2((y1-y0),(x1-x0)),反正切函数,计算两点形成斜率的角度 return d1 < d2;}
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
测试结果:满足设计要求
阅读全文
0 0
- Qt中按照逆时针给一组坐标排序
- 将多边形点按照逆时针排序
- 给一组随机数排序
- Java中如何把一组对象按照其某一个属性值进行排序?详见补充:
- Java中如何把一组对象按照其某一个属性值进行排序?
- jquery中按照商品价格给li标签排序的方法
- 给随机的一组数排序
- 给Map排序---按照key的字母
- iOS 之按照首字母排序并赋值给相应地Section中
- java中给map按照值value排序输出,用Comparator实现
- 凸多边形定点逆时针排序
- 给定一组不重叠的间隔,在间隔中插入一个新的间隔(如有必要,合并)。间隔最初按照起始时间进行排序。
- mysql:百度地图经纬度,按照经纬度坐标排序查询
- 数组排序之对一组学生按照成绩, 学号,年龄, 姓名排序~
- 一组成绩,一组学生,按照成绩的大小,由高到底排序出姓名和成绩(二叉树)实现
- 怎样用指针给一组无序的数据排序
- Qt中坐标:窗口坐标,视口坐标
- 按照JavaBean中某几个属性排序
- MongoDB安装
- MongoDB安装
- Java String.split()用法小结
- 欢迎使用CSDN-markdown编辑器
- Java多线程工具包java.util.concurrent---ReadWriteLock
- Qt中按照逆时针给一组坐标排序
- win7删除不了打印机该怎么办?win7删除打印机后刷新又出来的解决方法
- Ubuntu16.04 安装tensorflow+Fast-RCNN+cuda+cudnn过程
- AJAX参数介绍
- 面试题
- Android按钮按下的时候改变颜色实现方法
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(4-1)-- 卷积神经网络基础
- Maven学习
- AjaxDemo