参考资料

  1. hankcs.com: POJ 1981 Circle and Points 题解
  2. aswmtjdsj: POJ 1981 Circle and Points 【定长圆覆盖最多点问题】
  3. zxy_snow: 极角排序

概念

In mathematics, the polar coordinate system is a two-dimensional coordinate system in which each point on a plane is determined by a distance from a reference point and an angle from a reference direction.

The reference point (analogous to the origin of a Cartesian system) is called the pole, and the ray from the pole in the reference direction is the polar axis. The distance from the pole is called the radial coordinate or radius, and the angle is called the angular coordinate, polar angle, or azimuth.
SOURCE

计算极角

在C++里,可用定义于<cmath>中的std::atan2函数计算极角。

std::atan2(y, x) computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
If no errors occur, the arc tangent of y/x in the range [-π, +π] radians, is returned.
SOURCE

有的资料(例如参考资料1)说 atan2 的返回值范围是 $(-\pi, \pi]$,这是不准确的。另外,对于极角排序而言,某个极角是写成 $-\pi$ 还是写成 $\pi$ 并没有区别,因为这两个值恰是区间的两端。

用两个极角表示的一段圆弧

在一些计算几何问题中,我们需要求同一个圆上的若干段弧的交集或并集。这个问题类似于在直线上求区间的并或交。我们可以用弧的两端点对圆心的极角来表示一段圆弧。如果直接用 atan2 来求极角,会出现两个问题:

  1. 实际问题中一般难以判断哪个点是起点,哪个点是终点(这里所谓“弧的起点、终点”对应于直线上区间的左、右端点)
  2. atan2 求出的极角并不能正确地表示「跨过极角为 $\pi$ 的射线(极轴的反向)」的弧

为了解决问题1,我们不直接求弧端点的极角,转而求「弧的中点」对圆心的极角,再求出弧的圆心角的大小(一般求圆心角的一半更为方便),这样便无需考虑起点终点的问题,自然就将弧表示成区间了且区间长度就是弧的圆心角大小。

为了解决问题2,若所求出的「弧的中点的圆心角」为负值,就将其加上 $2\pi$。
(注意:参考资料2中的解法,并没有处理问题2,是有bug的)

这两个技巧都比较巧妙,请读者仔细体会。

习题

极角排序

见参考资料3。

计算几何 I. 极角的更多相关文章

  1. hrbustoj 1305:多边形(计算几何,极角排序练习)

    多边形 Time Limit: 1000 MS     Memory Limit: 65536 K Total Submit: 113(42 users)   Total Accepted: 51(3 ...

  2. HDU 5784 How Many Triangles

    计算几何,极角排序,双指针,二分. 直接找锐角三角形的个数不好找,可以通过反面来求解. 首先,$n$个点最多能组成三角形个数有$C_n^3$个,但是这之中还包括了直角三角形,钝角三角形,平角三角形,我 ...

  3. ●POJ 2007 Scrambled Polygon

    题链: http://poj.org/problem?id=2007 题解: 计算几何,极角排序 按样例来说,应该就是要把凸包上的i点按 第三像限-第四像限-第一像限-第二像限 的顺序输出. 按 叉积 ...

  4. CodeForces - 197D

    开场连wa三发A题,差点心态崩了,还好坚持打完了,一共A了三题 A题,判断能不能放第一个圆,能放的话,先手比赢 #include<map> #include<set> #inc ...

  5. poj 1696:Space Ant(计算几何,凸包变种,极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2876   Accepted: 1839 Descrip ...

  6. 【计算几何】【极角排序】【二分】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem J. Triangles

    平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形. 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调 ...

  7. 【计算几何】【凸包】【极角排序】【二分】Gym - 101128J - Saint John Festival

    平面上n个红点,m个黑点,问你多少个黑点至少在一个红三角形内. 对红点求凸包后,转化为询问有多少个黑点在凸包内. 点在凸多边形内部判定,选定一个凸包上的点作原点,对凸包三角剖分,将其他的点极角排序之后 ...

  8. bzoj 5099 [POI2018]Pionek 计算几何 极角排序

    [POI2018]Pionek Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 269  Solved: 80[Submit][Status][Disc ...

  9. 【计算几何】【极角序】【前缀和】bzoj1132 [POI2008]Tro

    把点按纵坐标排序,依次枚举,把它作为原点,然后把之后的点极角排序,把叉积的公式稍微化简一下,处理个后缀和统计答案. #include<cstdio> #include<cmath&g ...

随机推荐

  1. as 开启代码混淆和混淆规则

    app的builde.gradle的文件下,buildTypes节点添加release节点,minifyEnabled属性表示是否开启混淆,proguardFiles表示混淆依赖的文件,具体开启方法如 ...

  2. IOS与android

    Android和iOS那个好?应该先往哪个上面投入资源?多次被人问到此类问题,笔者刚好自己的项目也需要考虑iOS版本.就索性进行了一番调研,于是有了本文(本次不讨论越狱的iOS) 首先从情感上,你喜欢 ...

  3. Educational Codeforces Round 12补题 经典题 再次爆零

    发生了好多事情 再加上昨晚教育场的爆零 ..真的烦 题目链接 A题经典题 这个题我一开始推公式wa 其实一看到数据范围 就算遍历也OK 存在的问题进制错误 .. 思路不清晰 两个线段有交叉 并不是端点 ...

  4. spark简单入门

    本文由cmd markdown编辑,原始链接:https://www.zybuluo.com/jewes/note/35032 RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spa ...

  5. 关于用终端运行php来测试推送的问题

    照网上的方法,合并好了证书的pem,密码也是对的,然后也写好了推送用的php文件,在终端里php这个文件,报错报错内容是:Warning: stream_socket_client(): SSL op ...

  6. FaceBook pop 动画开源框架使用教程说明

    https://github.com/facebook/pop Pop is an extensible animation engine for iOS and OS X. In addition ...

  7. Google Colab免费GPU使用教程(一)

    一.前言 现在你可以开发Deep Learning Applications在Google Colaboratory,它自带免费的Tesla K80 GPU.重点是免费.免费!(国内可能需要tz) 这 ...

  8. Encryption-基础:base64加解密

    环境:vc2003 .h /********** This library is free software; you can redistribute it and/or modify it und ...

  9. uaf-湖湘杯2016game_学习

    0x00 分析程序 根据分析,我们可以得到以下重要数据结构 0x01 发现漏洞 1.在武器使用次数耗光后,程序会把存储该武器的堆块free,在free的时候没有清空指针,造成悬挂指针 2.commen ...

  10. Hibernate查询语句HQL8大特点

    Hibernate拥有一种功能非常强大的查询语言,这种语言被有意得与SQL非常相似,便于开发人员掌握.但不要被HQL的语法表面所迷惑,HQL完全是面向对象的,可以用来过程多态.继承.关联等关系. 1. ...