Appearance
浮点数与精度问题
特殊值:
- +0.0 -0.0
- 1.0/0.0=inf -1.0/0.0=-inf(inf 仍然为
double而非string) - nan,非数字,例如:
- nan 除了
时返回 true,其它比较运算均返回false
- nan 除了
- 若问题能用整数解决则不用浮点数
- 除非时限紧张,否则使用
long double - 减少数学库函数的调用
- 进行浮点数比较时,加入容限(误差)eps
点
向量:
坐标系中一个点对应一个向量,通常使用向量表示一个点。
点积:
点积是一个值:
几何意义:
- 向量的长度:
- 向量的夹角:
- 向量的投影:
- 向量垂直:
叉积:
向量的叉积仅在
维是一个标量: 维是一个向量:
几何意义:
- 平行四边形面积:
- 向量平行:
- to-left 测试
to-left 测试
判断点 P 在有向直线 AB 左侧/右侧上。
向量逆时针旋转
线段
判断点是否在线段上:
- 点 P 在 AB 所在直线上:
- 点 P 在 AB 之间:
判断两条线段是否相交:
- 点 A 和点 B 在直线 CD 的不同侧
点 C 和点 D 在直线 AB 的不同侧 - 三点共线,四点共线特判
直线
通常使用点向式表示:直线上一点 P + 方向向量
求直线与 A 的距离:
求点 A 在直线上的投影点 B:
两直线交点:
多边形
由点集表示。
- 一般按逆时针顺序
- 不一定满足凸性
- 注意第一个点与最后一个点的处理
多边形的面积:
特别地,三角形的面积:
多边形的方向:
多边形面积为正:逆时针
多边形面积为负:顺时针
判断点是否在多边形内
光线投影法
从该点引出一条射线,如果这条射线与多边形有奇数个交点,则该点在多边形内部,否则该点在多边形外部。
回转数法
回转数:面向闭合曲线逆时针绕过该点的总次数。
遵循非零规则:当回转次数为 0 时,点在曲线外部。
- 一种实现方法:计算相邻两边夹角(有方向)的和。
- 另一种实现方法:从该点引出一条射线,每经过一条自上而下穿过该射线的边,贡献 -1;每经过一条自下而上穿过该射线的边,贡献 +1,可以做到无精度误差。
边界情况:
- 点在多边形上,对于每条边特判。
- 引出射线交多边形于顶点,视作在射线上侧(影响了自下而上还是自上而下的判断)
判断点是否在凸多边形内
次 to-left 测试 。 二分
。
