计算几何基础知识

计算几何基础知识

向量,极坐标

基础概念高中课本应该讲了吧 贴下 oiwiki 链接:向量,极坐标

平面向量在计算几何中一般用坐标来描述,(x,y) 表示的是起点在 (0,0),而终点在 (x,y) 的平面向量。

所以我们也可以用点来描述向量。

理解下文的式子最好都将向量看成起点在 (0,0),终点在 (x,y) 的一个”箭头“。

基本运算:

A(x1,y1)B(x2,y2)

那么有:

A+B=(x1+x2,y1+y2)

AB=(x1x2,y1y2)

所以点的加减法可以理解成其表示向量的加减法。

而加减法的结果都是向量。

如果A,B 的夹角为 θ 。那么有:

AB=|A||B|cosθ

我们称其为 A,B 的点积。

以上我们的向量的运算都是在二维平面意义下的。

而在三维空间中我们有空间向量。也就是三维空间下的向量,类似平面向量,我们同样可以用一个点的坐标来描述空间向量。

A(x1,y1,z1),B(x2,y2,z2)。而上述二维平面下的运算,我们可以看成是空间向量 A,Bz 值相等时的运算。

定义向量 A,B 的向量积为 A×B。其结果是一个向量。

这个玩意儿在平面上的应用就是用来判断两个向量的关系位置。

因为 A×B=(y1z2y2z1,z1x2z2x1,x1y2x2y1)

A,B 之间的夹角为 θ(θ<π) ,且他们的 z 均为 0

那么 A×B=(0,0,x1y2x2y1)

易知向量积的方向由 x1y2x2y1 决定。又根据右手定则(用来看向量积方向的),我们可以得出结论:

如果 x1y2x2y1>0

那么 B 就由 A(x,y,0)(xR,yR) 平面内逆时针旋转 θ 度得到。

反之,B 就由 A(x,y,0)(xR,yR) 平面内顺时针旋转 θ 度得到。

x1y2x2y1=0 时他俩重合奥。

就像这样

OpJbGR.png

A×C>0,A×B<0

极角排序

建立极坐标系,以 O 为极点,Ox 为极轴 ,正方向定义为逆时针方向。

(x,y) 为一个点 A (看做一个向量也行),那么这个点的极角是 xOA

一种做法是直接利用 atan2 函数求出极角进行排序,不过运算结果是 double,只能说懂得都懂。

还有一种做法就是先求出极角终边在哪个象限,然后利用叉乘求解。

划成四个象限似乎有些麻烦。

因为叉乘的应用范围是 [0,π)。所以我们只要将一个平面划为两部分。如果两个点落在同一部分,那么利用叉乘求解,落在不同部分我们就根据自己定义来直接判断即可。

举个例子,如果我们要让 第四象限的角 < 第一象限的角 < 第二 < 第三。

那么我们将 [x,x) 划为第一部分,(x 代表 x 半轴,x 就是负半轴),另一块是第二部分,如果两个点落在第一部分,那么用叉乘计算,如果 A×B>0 ,那么 A 的极角小于 B 的极角。

如果落在不同部分,根据我们的定义,第一部分的就小于第二部分。

凸包

这一块 oiwiki 讲的很详细了,我偷个懒。凸包

闵可夫斯基和

看我写的这篇:https://www.cnblogs.com/nightsky05/p/16211683.html

posted @   夜空之星  阅读(219)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示