极角排序学习
来源:互联网 发布:历史股价数据 编辑:程序博客网 时间:2024/06/08 15:58
练习题:黑猫
凸多边形是一个内部为凸集的简单多边形。凸多边形(Convex Polygon)指如果把一个多边形的所有边中,任意一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形,其内角应该全不是优角,任意两个顶点间的线段位于多边形的内部或边上。
凹多边形(Concave Polygon)指如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他各边不都在此直线的同旁,那么这个多边形就叫做凹多边形,其内角中至少有一个优角。极角排序:在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)。
极角排序做了一些题目了,虽然都是简单题但是还是有一些体会的。
何为极角排序?其实你可以这样想象,就是平面上的点和原点连城一条线段,然后用一条在平面上为0度的直线逆时针旋转一直转到360度也就是一圈,这样一个接一个碰到的点就是极角排序的顺序
比如HDU3532,这道题就是以其中某一个点为原点建立直角坐标系,然后处理其他点到这个点的直线的角度,然后按角度排序(也就是所谓的极角排序),要使得两条直线的夹角最小,肯定是取角度排序后相邻的两条直线拉。为什么叫极角呢?我个人的理解是因为原点不固定,如果原点固定的话其实可以理解为高中学到的与x轴的角度(这样叫也高达上一点吧 hhhh)。
还有HDU6127,这道题其实是直接按斜率排序的,但还是用函数atan处理的一下(因为x = 0的情况斜率处理不了),这样你就可以这样子想象,它首先是一条与y轴重合的直线直线直线,然后逆时针去旋转,因为不存在两点的连线过直线,所以按极角排序后,每次访问一个点实际上可以想象这个点就是一条与y轴重合的直线逆时针旋转碰到的第一个点,然后每次访问排好序的下一个点就可以想象这个直线在逆时针转动。
关于atan和atan2两个函数,都是求反正切的函数
atan( (y2-y1)/(x2-x1) )
atan2( y2-y1, x2-x1 )
注意参数不一样、
atan的范围是[-90, 90] atan2[-180, 180],两者都可以计算x2 - x1 = 0的情况
阅读全文
0 0
- 极角排序学习
- 排序--快速排序学习
- 排序--快速排序学习
- 排序--快速排序学习
- 【学习排序】
- 学习排序
- 排序学习
- 排序学习
- 排序算法学习- 快速排序
- 交换排序:冒泡排序 学习
- 交换排序:快速排序 学习
- 排序学习_冒泡排序
- 排序学习之插入排序
- 【java学习】排序_Shell排序
- 排序算法学习-冒泡排序
- 排序算法学习:快速排序
- 计算几何的排序--极角排序
- 极角排序
- 用 Python 实现每秒处理 120 万次 HTTP 请求
- RxJava基础使用
- mybatis配置
- 算法学习之枚举--熄灯问题POJ1222EXTENDED LIGHTS OUT
- ConcurrentModificationException异常及解决方案
- 极角排序学习
- linux常用命令
- linux基础知识回顾
- Longest Valid Parentheses leetcode java
- andriod事件分发机制源码解析
- [LintCode]56.两数之和
- 8月19日训练笔记
- HDU 6152 Friend-Graph
- R语言KNN聚类