W
e
l
c
o
m
e
: )

浅学计算几何

极角排序

精度差较大的做法:使用 \(atan2(y, x)\)(直接返回向量 \(\vec{a}(x, y)\)\(\vec{0}\) 的夹角大小) 的大小排序。

面对整数不会丢失精度的做法:

我们知道对于同一半平面的向量 \(\vec{a}, \vec{b}\)\(\sin<\vec{a}, \vec{b}>=\frac{\vec{a}\times\vec{b}}{|\vec{a}||\vec{b}|}\),由于保证了 \(<\vec{a}, \vec{b}> \in [0, \pi]\),我们珂以直接判断 \(\sin\) 正负性就珂以判断 \(\vec{a}, \vec{b}\) 的大小(正就是 \(\vec{a}\) 要逆时针翻到 \(\vec{b}\),即极角较小,否则相反)。

直接计算叉乘正负性就珂以了,因为分母不影响。

例题:CF598C

解法:极角排序完后,现欲比较角的大小。

我们将两个角旋回到 \(x(0, +\infty)\) 上,这样右边成了向量极角比较。

考虑一组角向量 \(<\vec{a}, \vec{b}>\) 旋转到 \(x(0, +\infty)\) 上变成了 \(<|\vec{a}|\cos \theta, |\vec{a}|\sin \theta>=<\frac{\vec{a} \cdot \vec{b}}{|\vec{b}|}, \frac{\vec{a} \times\vec{b}}{|\vec{b}|}>\),放缩 \(|\vec{b}|\) 后就消除了分数。

posted @ 2022-08-05 10:31  127_127_127  阅读(53)  评论(0编辑  收藏  举报