struct point{
  double x,double y;
  bool operator<(const point &a,const point &b){
    return a.x<b.x||a.x==b.x&&a.y<b.y;
  }
}

利用点积求夹角:$acos(dot(a,b)/len(a)/len(b))$

叉积:$T=\vec{a} \times \vec{b}=-\vec{b} \times \vec{a} =X_aY_b-X_bY_a=\vline \vec{a} \vline \vline \vec{b} \vline sin(vec{a},vec{b})$

方向用右手定则判断,垂直平面

T=0: 两向量共线或反向
T>0:b在a左侧
T<0:b在a右侧

两向量所构平行四边形面积为叉积

旋转:
向量(x,y)绕坐标原点逆时针旋转$\theta$度
(用三垂直定理)
$$x'=xcos\theta-ysin\theta$$
$$y'=xsin\theta+ycos\theta$$

tips:
在读入时对每个点进行微小扰动
point a=(point){x+eps(),y+eps()};
或point a=rotate(a,1e-7)
以避免出现斜率不存在的情况

数据存储
1.直线/线段:斜截式或一般式
$Ax + By + C = 0 or y = kx + b$
2.圆:圆⼼坐标,圆的半径
$(x − a)^2 + (y − b)^2 = r2$
3.多边形:多边形上所有点坐标(推荐使用逆时针)
4.半平面:
$Ax + By + C ≥ 0$

公式定理:
1.正弦定理:AAS/ASA解三角形
2.余弦定理:SAS/SSS解三角形
3.质⼼:点集的加权平均数,就是好⼏个杠杆原理
$x_0=\frac{1}{N}\sum_{i=1}^N x_im_i,y_0=\frac{1}{N}\sum_{i=1}^N y_im_i$
三角形质⼼:中线交点
四边形质⼼:两个三角形质⼼的质⼼,权重为三角形面积
定比分点:杠杆原理坐标化
4.三角形面积:正弦定理,叉积,海伦公式:$p = (a + b + c)/2; S = \sqrt{p(p − a)(p − b)(p− c)}$

应用:
1.判折线段的拐向 a,b,c $\vec{ab} \times \vec{bc}$ 叉积大于0则左拐,否则右拐
2.判断点是否在线段上: a,b,c

(忘了按保存键就先咕咕咕了2333

C 语言里 double atan2(double y,double x) 返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。

取值范围为 img

//得到两直线相交的交点
point getpoint(line a,line b){
     point aa=a.e-a.s,bb=b.e-b.s,cc=b.s-a.s;
   double t=(bb^cc)/(aa^bb);
   return (point){a.s+aa*t}; 
}
Last modification:February 15th, 2019 at 10:08 pm