计算几何学习笔记一(二维基础)

二维基础

主要是牛客计算几何课程的笔记。

1. 点的表示

using Point  = pair<double,double>
//横坐标: .first
//纵坐标: .second
题目不复杂时可用
//更推荐的写法
struct Point{double x,y;};
横纵坐标 .x .y

2. 向量

2.1 向量相关

using Vector = Point;
向量点积: a.x*b.x+a.y*b.y 点积是标量
向量模长: sqrt(a.x*a.x+a.y*a.y)
向量垂直:  a.x*b.y-a.y*b.x

在这里插入图片描述
注:向量叉积是垂直于a、b向量的,上图

向量叉积: a.x*b.y-a.y*b.x
应用:
平行四边形面积:
叉积ab = a.x*b.y-a.y*b.x
S = sqrt(ab.x*ab.y-ab.x*ab.y)

判向量平行:if(叉积ab==0) 则平行
to-left测试
判断点P在有向直线AB的左侧或者右侧或者就在直线上

在这里插入图片描述
感觉可以右手螺旋定则来想象。

2.2 例题

在这里插入图片描述
开方比三角函数的精度损失要小。

3. 线段

struct Segment{Point a,b;}
//记录左右端点

3.1 例题

例题1

在这里插入图片描述
个人思路:

  1. 先通过叉积判断点是否在AB所在直线上,
  2. 然后计算点与A的距离和点与B的距离
  3. 计算它们的和,把和与AB的长进行大小比较,相等则在AB线段上。

参考答案:
在判断点P在AB之间可以通过
P A ⋅ P B < = 0 或 m i n { A x , B x } < = P x < = m a x { A x , B x } m i n { A y , B y } < = P y < = m a x { A y , B y } PA·PB<=0\\ 或min\{{A_x,B_x}\}<=P_x<=max\{A_x,B_x\}\\ min\{A_y,B_y\}<=P_y<=max\{A_y,B_y\} PAPB<=0min{Ax,Bx}<=Px<=max{Ax,Bx}min{Ay,By}<=Py<=max{Ay,By}
来得到。

例题2

在这里插入图片描述
思路:想办法证明A,B两点在线段CD两边,可以通过to-left测试,判断A在CD的某一方,B在CD的某一方。然后判断AB两点是否在CD的同一方,CD同理需要判断是否在AB的两侧。
在这里插入图片描述
在做了跨立实验后,需要特判三点共线、四点共线的情况。

4. 直线

struct Line{Point p,v;};
//v是方向向量

4.1 例题

例题一

输入直线(p,v)与点A,求AB的距离
在这里插入图片描述在这里插入图片描述

例题二

输入直线(p,v)与点A,求A在直线上的投影点B的坐标
在这里插入图片描述

例题三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值