向量 学习笔记

向量的基本运算

定义 a=(x1,y1),b=(x2,y2),θ 为两个向量的夹角

向量加法:

a+b=(x1+x2,y1+y2)
满足于三角形法则(首尾顺次相连)和平行四边形法则(共起点)

向量减法:

a+b=(x1x2,y1y2)

向量点乘:

ab=x1x2+y1y2=|a||b|cosθ
ab>00θ<90
ab=0θ=90
ab<090θ<180

向量叉乘:

|a×b|=|a||b|sinθ
计算满足于右手法则
其几何意义为两个向量围成的平行四边形面积
但向量外积本质上在三维空间内定义
a=(x1,y1,zz1),b=(x2,y2,z2)
a×b=(y1z2y2z1,z1x2x1z2,x1y2x2y1)

向量旋转 (逆时针)

令被旋转的向量为 (x,y)
(xcosθysinθ,xsinθ+ycosθ)
[cosθsinθsinθcosθ] [xy]
可以使用画图与三角形恒等变形进行证明

求多边形的面积

将多边形上的点逆时针标记为 p1,p2,p3pn ,选择一个辅助点 O
记向量 vi 表示 Opi
则多边形面积为
S=12|i=1Nvi×vimodn+1|
使用向量叉乘的几何意义实现,用不同的方向表示正负

坐标的距离

欧式距离

n 维空间下的点 A=(x11,x12,x13x1n)B=(x21,x22,x23x2n) 的欧式距离:
||AB||=i=1n(x1ix2i)2

曼哈顿距离

d1(A,B)=|x1x2|+|y1y2|
满足以下性质

  1. d1(A,B)0
  2. d1(A,A)=0
  3. d1(A,B)=d(B,A)
  4. d1(A,C)+d(C,B)d(A,B)
inline double dis(int x1,int y1,int x2,int y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

切比雪夫距离

d2(A,B)=max{|x1x2|,|y1y2|}

曼哈顿距离与切比雪夫距离的转换

将点 (x,y) 转化为 (x+y,xy) ,原坐标系的曼哈顿距离为新坐标系中切比雪夫距离
将点 (x,y) 转化为 (x+y2,xy2) ,原坐标系的曼哈顿距离为新坐标系中切比雪夫距离
例题:
[NOIP2017 提高组] 奶酪
[USACO04OPEN]Cave Cows 3

判断几何图形的关系

判断点是否在线段上

设点为 Q,线段为 P1P2
判断条件:(QP1)×(P2P1)=0Q 在以 P1,P2 为对角顶点的矩形内

inline int cross(reg int x1,reg int y1,reg int x2,reg int y2){return x1*y2-y1*x2;}
inline bool check(reg point p1,reg point p2,reg point q){
	if (!(min(p1.x,p2.x)<=q.x&&q.x<=max(p1.x,p2.x)&&min(p1.y,p2.y)<=q.y&&q.y<=max(p1.y,p2.y))) return 0; 
	return cross(p2.x-p1.x,p2.y-p1.y,q.x-p1.x,q.y-p1.y)*
	       cross(p2.x-p1.x,p2.y-p1.y,q.x-p2.x,q.y-p2.y)==0;
}

判断两线段是否相交

设两个线段分别为 P1P2Q1Q2

  1. 快速排斥实验:若以 P1P2 为对角线的矩形与以 Q1Q2 为对角线的矩形不相交,那么两个线段显然不向交
  2. 跨立实验:如果两线段相交,则两线段必然相互跨立对方
    P1P2 跨立 Q1Q2 ,则矢量(P1Q1)(P2Q1) 位于矢量 (Q2Q1) 的两侧
    在代码实现上为 (P1Q1)×(Q2Q1)(P2Q1)×(Q2Q1)0
    当且仅当 Q1P1P2 上时取等
    同时要对 Q2 进行判断
    判断线段和直线是否相交 只要进行跨立实验

判断点是否在多边形中

设这个点为 P ,从 P 引一条射线 L,计算与多边形的交点
若交点个数为奇数,在多边形内,否则在多边形外
几种情况要特判一下

posted @   Matutino_Lux  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示