【计算几何】二维基础(向量、极坐标)

发布时间 2023-10-12 17:28:04作者: 木易meow

前排碎碎念

大抵就是些与坐标系,向量有关的东西。难度不大,但是很杂,遂整理。

向量运算

A(a.x,a.y),B(b.x,b.y)

加法:

A+B=(a.x+b.x , a.y+b.y)

减法:

A-B=(a.x-b.x , a.y-b.y)

点积:

  • a·b=|a||b|cos<a,b> =x1x2 + y1y2
  • 向量b在向量a上的投影与a长度的乘积
  • 应用:判断两向量垂直/平行
    求两向量夹角

叉积:

  • a x b = |a||b|sin<a,b>
    = x1y2-y1x2
  • 几何意义:向量a与b张成的平行四边形的有向面积 顺正逆负
  • 应用:判断点线的位置关系:
    (b-a) x (c-a) > 0 c在直线ab的左侧,反之在直线右侧
  • 判断线线的位置关系:
    直线ab与线段cd无交点:c与ab叉积 x d与ab叉积 >0
    即两点在直线同侧
  • 求两直线的交点(点向式)
double t=(a-b)·v/(v·u);
return a+ut;

极坐标

构成:

一个定点O:极点;一条从O引出的射线:极轴;一个单位长度与单位角度与正方向

极坐标下点的表示

有序数对(极径,极角)
同一个点可以有多个有序数对表示(角度相差2kΠ),同一个极坐标表示的点是唯一确定的
对于Cpp,调用atan2(y,x)获得极角,极径即为sqrt(x^2 + y^2)

空间球坐标系

坐标描述与实际位置:球坐标(a,b,c)为 距离球心距离为a,垂直向下偏转b°,水平逆向偏转c°的点

二维平面中元素的表示:

点:pair;向量:pair;直线:点向;线段:记录两端点坐标
多边形:按照一定顺序记录多边形的每个顶点

基本公式

正弦定理,余弦定理

一些基本操作

  • 快速排斥实验:简单粗筛
  • 跨立实验:一个线段的两个端点在另一个线段的两端
  • 判断一点在多边形内部:
    光线投射算法:从该点为端点引出一条射线,该射线每次与多边形的一条边相交,就切换一次与多边形的内外关系 奇内偶外
    回转数算法:把该点与多边形的所有顶点连接起来,计算相邻两边夹角的和。注意这里的夹角是 有方向的。如果夹角和为 0,则这个点在多边形外,否则在多边形内
  • 求任意多边形的面积
    利用 叉积 进行运算 取多边形上的点逆时针标记为p1...Pn,任选一个辅助点O,记向量vi=pi-O,那么多边形的面积为 求和 vi x v(i%n+1) /2
  • 圆与直线交点:
    勾股定理
  • 两圆交点:
    两个交点: 将一圆圆心与交点相连,求出两圆心连线与该连线所成角。这样,将两圆心连线的方向向量旋转这个角度,就是圆心与交点相连形成的半径的方向向量了。最后沿方向向量方向将圆心平移半径长度。
    一个交点:在圆心的连线上