向量 学习笔记
向量的基本运算
定义
向量加法:
满足于三角形法则(首尾顺次相连)和平行四边形法则(共起点)
向量减法:
向量点乘:
向量叉乘:
计算满足于右手法则
其几何意义为两个向量围成的平行四边形面积
但向量外积本质上在三维空间内定义
向量旋转 (逆时针)
令被旋转的向量为
可以使用画图与三角形恒等变形进行证明
求多边形的面积
将多边形上的点逆时针标记为
记向量
则多边形面积为
使用向量叉乘的几何意义实现,用不同的方向表示正负
坐标的距离
欧式距离
在
曼哈顿距离
满足以下性质
inline double dis(int x1,int y1,int x2,int y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
切比雪夫距离
曼哈顿距离与切比雪夫距离的转换
将点
将点
例题:
[NOIP2017 提高组] 奶酪
[USACO04OPEN]Cave Cows 3
判断几何图形的关系
判断点是否在线段上
设点为
判断条件:
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;
}
判断两线段是否相交
设两个线段分别为
- 快速排斥实验:若以
为对角线的矩形与以 为对角线的矩形不相交,那么两个线段显然不向交 - 跨立实验:如果两线段相交,则两线段必然相互跨立对方
若 跨立 ,则矢量 和 位于矢量 的两侧
在代码实现上为
当且仅当 在 上时取等
同时要对 进行判断
判断线段和直线是否相交 只要进行跨立实验
判断点是否在多边形中
设这个点为
若交点个数为奇数,在多边形内,否则在多边形外
几种情况要特判一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)