计算几何是算法竞赛的一大块,而叉积是计算机和的基础。

首先叉积是计算说向量之间的叉积,那么我们可以这样定义向量,以及向量的运算符重载。

struct Point
{double x,y;Point(double x=0,double y=0):x(x),y(y) {}
};
typedef Point Vector;
Vector operator + (Vector A,Vector B) { return Vector(A.x+B.x,A.y+B.y); }
Vector operator - (Vector A,Vector B) { return Vector(A.x-B.x,A.y-B.y); }
Vector operator * (Vector A,double p) { return Vector(A.x*p,A.y*p); }
Vector operator / (Vector A,double p) { return Vector(A.x/p,A.y/p); }bool operator < (const Point& a,const Point& b)
{return a.x<b.x || (a.x==b.x && a.y<b.y);
}
int dcmp(double x)  //
{if(fabs(x)<esp) return 0;else return x<0?-1:1;
}
bool operator == (const Point& a,const Point& b)
{return dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y)==0;
}

首先在二维坐标下介绍一些定义:
点:A(x1,y1),B(x2,y2)

向量:向量AB=( x2 - x1 , y2 - y1 )= ( x ,  y );

向量的模 |AB| = sqrt ( x*x+y*y );

向量的点积: 结果为 x1*x2 + y1*y2。

点积的结果是一个数值。

点积的集合意义:我们以向量 a 向向量 b 做垂线,则 | a | * cos(a,b)为 a 在向量 b 上的投影,即点积是一个向量在另一个向量上的投影乘以另一个向量。且满足交换律

应用:可以根据集合意义求两向量的夹角,cos(a,b) =( 向量a * 向量b ) / (| a | * | b |) =  x1*x2 + y1*y2 / (| a | * | b |)

向量的叉积: 结果为 x1*y2-x2*y1

叉积的结果也是一个向量,是垂直于向量a,b所形成的平面,如果看成三维坐标的话是在 z 轴上,上面结果是它的模。

方向判定:右手定则,(右手半握,大拇指垂直向上,四指右向量a握向b,大拇指的方向就是叉积的方向)

叉积的集合意义:1:其结果是a和b为相邻边形成平行四边形的面积。

2:结果有正有负,有sin(a,b)可知和其夹角有关,夹角大于180°为负值。

3:叉积不满足交换律

应用:

1:通过结果的正负判断两矢量之间的顺逆时针关系

若 a x b > 0表示a在b的顺时针方向上

若 a x b < 0表示a在b的逆时针方向上

若 a x b == 0表示a在b共线,但不确定方向是否相同

2:判断折线拐向,可转化为判断第三点在前两的形成直线的顺逆时针方向,然后判断拐向。

3:判断一个点在一条直线的那一侧,同样上面的方法。

4:判断点是否在线段上,可利用叉乘首先判断是否共线,然后在判断是否在其上。

5:判断两条直线是否想交(跨立实验)

根据判断点在直线那一侧我们可以判断一个线段的上的两点分别在另一个线段的两侧,当然这是不够的,因为我们画图发现这样只能够让直线想交,而不是线段,所以我们还要对另一条线段也进行相同的判断就ok。

代码:

///计算点积,及向量长度,及向量夹角
double Dot(Vector A,Vector B) { return A.x*B.x+A.y*B.y; }
double Length(Vector A) { return sqrt(Dot(A,A)); }
double Angle(Vector A,Vector B) { return acos(Dot(A,B))/Length(A)/Length(B); }
//计算叉积,向量逆时针旋转,两线段是否想交
double Cross(Vector A,Vector B) { return (A.x*B.y-A.y*B.x); }
double Area2(Vector A,Vector B,Vector C)  { return Cross(B-A,C-A); }
Vector Rotate(Vector A,double rad)
{return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));
}
bool Converxline(Vector A,Vector B,Vector C,Vector D)
{//共线或平行if((Area2(A,B,C)==0&&Area2(A,B,D)==0) || Area2(A,B,C)*Area2(A,B,D)>0||Area2(C,D,A)*Area2(C,D,B)>0)return false;elsereturn true;
}

转自:

https://blog.csdn.net/y990041769/article/details/38258761

计算几何基础——点积和叉积相关推荐

  1. 点积和叉积【计算集合】

    先简单看一道几何的题目吧. 常见的空间几何公式: 1.俩点之间的距离sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)) 2.平面三角公式:p = (a+b+ ...

  2. 计算几何基础知识 叉乘、点乘、点到直线距离、叉积方向法等

    一.几何 常考却不怎么掌握的: ​ 数据结构:分块 ​ 字符串:后缀数组.后缀自动机 ​ 数学:FFT.DFT.NTT.杜教筛.拉格朗日插值等 ​ 图论:网络流.最小费用最大流 ​ 动规:五边形数优化 ...

  3. 计算几何基础(持续更新)

    计算几何 文章目录 计算几何 二维几何基础 点和向量 点积和叉积 点和线 多边形 三角形和普通多边形定义 判断点在多边形内部 多边形的面积 求多边形的重心 圆 圆的定义 最小圆覆盖 二维几何基础 1. ...

  4. 计算几何及其应用——计算几何基础

    写在前面:当时开计算几何这个专题神奇的从解析几何开始了,然后最近发现<计算几何及应用(金博)>这本书前面那章忽略掉了一些重要的东西比如说点定位.半平面相交之类的东西,恰好还有一些和计算几何 ...

  5. (一)计算几何基础(上)

    文章目录 无语子,自己的模板出锅了,不过修改好了 计算几何基础知识点 例题一: 例题二 例题三:![在这里插入图片描述](https://img-blog.csdnimg.cn/ed358fece28 ...

  6. matlab 向量_Matlab:向量点积和叉积及求模

    点击上方蓝字关注 无距书乡 获取持续更新 上一篇中我们说到了如何在matlab中创建向量以及向量的加减乘除方法.今天我们继续介绍向量的点积和叉积以及如何求向量的长度.下一篇再讲矩阵相关知识. 两个向量 ...

  7. 向量复习(一):定义、求解、四则运算、点积和叉积

    向量复习(一) 1. 向量的定义 2. 向量的表示 3. 向量的求解 4. 向量的四则运算 4.1 加法 4.2 减法 4.3 乘法和除法 5. 点积和叉积 5.1 点积 5.2 叉积 6. 模的求解 ...

  8. 计算几何基础【用图来助你理解几何算法】

    写在前面,本人也是小白,这是我在大学自学的内容,有部分内容来自网上,若侵权请告知.当然如果这篇文章能够帮助到你,可以点赞收藏,如果写的不妥的地方,欢迎大佬们指出. 1.基本概念 1.1计算几何的引入 ...

  9. 计算几何基础入门详解

    计算几何基础 1.最开始要提一下的还是精度问题,这在计算几何中可以说非常关键!!! const double eps=1e-8; //我一般都用eps表示,控制在1e-8左右,当然有些题会有它的要求 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task19. 相同的树
  2. 谈谈你对集成学习的见解与认识,描述一下它们的优势所在?
  3. R多变量正态性检验(Multivariate Normality Tests)
  4. java设计模式之装饰器模式
  5. 精细化容量管理的设备成本优化之路
  6. C#操作Sqlite快速入门及相关工具收集
  7. 终于把CString转化为char*了
  8. CSS内联样式的使用,实战篇
  9. arcgis分析道路节点中心性degree,closeness,betweenness
  10. PS 图片背景变为透明
  11. 【Pycharm教程】Pycharm下载安装、配置与测试
  12. iphone 通知声音_如何在iPhone上掌握通知
  13. 短信服务器部署位置,搭建短信服务器
  14. 计算机系统系统时间不准,windows7系统时间不对怎么办_windows7系统时间不准如何恢复-win7之家...
  15. grub 2.0安装linux,grub2引导安装kali2.0及安装ibus拼音输入法
  16. android程序出现了奇怪的错误 Field requires API level 5 (current min is 1): ......
  17. 2021年中国大学生程序设计竞赛女生专场 gym103389F 地图压缩
  18. 使用vue-quill-editor实现富文本编辑器(封装带移入提示)
  19. ❀数据集❀基于计算机视觉的情绪识别数据集
  20. 硬盘对拷怎么操作?这个方法更简单!

热门文章

  1. DotNetCasClient加载失败问题分析
  2. 【mysql】主键的概念作用及特点
  3. Python二维列表【重复与循环】
  4. 为什么不同的计算机有不同的IP地址,我的电脑的IP地址和网上显示的为什么不一样 – 手机爱问...
  5. 32、Python的面向对象基础
  6. YonBuilder后端框架MDD介绍
  7. 车辆提示请防止车辆滑动 即车辆驻车异常
  8. 孔维滢 20171010110《面向对象程序设计(java)》第十周学习总结
  9. 大前端JS部分基础面试题(含答案)
  10. 静态语言与动态语言的区别