ACM 计算几何向量

向量

简介

向量,又称矢量,是既有大小又有方向的量,向量的长度即向量的大小称为向量的模。在计算几何中,从ACM 计算几何向量指向ACM 计算几何向量的向量记作ACM 计算几何向量ACM 计算几何向量维向量可以用ACM 计算几何向量个实数来表示。向量的基本运算包括加减法、数乘、点积、叉积和混合积。使用向量这一个基本的数据结构,我们可以用向量表示点和更复杂的各种图形。

注意事项

我们一般用一个二维向量来表示点。注意,在有些计算几何相关的题目中,坐标是可以利用整形储存的。在做这样的题目时,坐标一定要用整形变量储存,否则精度上容易出错。具体的将点的坐标用整形变量储存可以需要使用一些技巧,比如计算中计算平方或将坐标扩大二倍等方式。

// Pt是Point的缩写
struct Pt {
double x, y;
Pt() { }
Pt(double x, double y) : x(x), y(y) { }
}; double norm(Pt p) { return sqrt(p.x*p.x + p.y*p.y); }
double dist (Pt a, Pt b) { return (a-b).norm(); }
void print(Pt p) { printf("(%f, %f)", p.x, p.y); }

基本计算

加减法

ACM 计算几何向量

向量的加减法遵从平行四边形法则和三角形法则。

示例代码
Pt operator - (Pt a, Pt b) { return Pt(a.x - b.x, a.y - b.y); }
Pt operator + (Pt a, Pt b) { return Pt(a.x + b.x, a.y + b.y); }

长度

向量ACM 计算几何向量的长度是ACM 计算几何向量

示例代码
double len(Pt p) { return sqrt(sqr(p.x)+sqr(p.y)); }

数乘

ACM 计算几何向量

向量的数乘是一个向量和实数的运算。ACM 计算几何向量如果是零,那么结果是一个零向量,如果ACM 计算几何向量是一个负数,那么结果向量会改变方向。

示例代码
Pt operator * (double A, Pt p) { return Pt(p.x*A, p.y*A); }
Pt operator * (Pt p, double A) { return Pt(p.x*A, p.y*A); }

点积

又称内积。

ACM 计算几何向量,其中ACM 计算几何向量ACM 计算几何向量ACM 计算几何向量的夹角。

应用

点积可以用来计算两向量的夹角。

ACM 计算几何向量

示例代码
double dot(Pt a, Pt b) { return a.x * b.x + a.y * b.y; }

叉积

叉积又称外积。叉积运算得到的是一个向量,它的大小是ACM 计算几何向量ACM 计算几何向量所构成的平行四边形的面积,方向与ACM 计算几何向量ACM 计算几何向量所在平面垂直,ACM 计算几何向量ACM 计算几何向量ACM 计算几何向量成右手系。

设两向量ACM 计算几何向量ACM 计算几何向量,它们在二维平面上的的叉积为:

ACM 计算几何向量

示例代码
double det(Pt a, Pt b) { return a.x * b.y - a.y * b.x; }

性质与应用

叉积拥有两个重要的性质——面积与方向。

两向量叉积得到新向量的长度为这两个所构成的平行四边形的面积,利用这个性质我们可以求三角形的面积。

两向量叉积能反映出两向量方向的信息。如果ACM 计算几何向量的符号为正,那么ACM 计算几何向量ACM 计算几何向量的逆时针方向;如果符号为负,那么ACM 计算几何向量ACM 计算几何向量的顺时针方向;如果结果为零的话,那么ACM 计算几何向量ACM 计算几何向量共线。

ACM 计算几何向量

计算结果 ACM 计算几何向量ACM 计算几何向量的方向
ACM 计算几何向量 ACM 计算几何向量ACM 计算几何向量的逆时针方向
ACM 计算几何向量 ACM 计算几何向量ACM 计算几何向量共线
ACM 计算几何向量 ACM 计算几何向量ACM 计算几何向量的顺时针方向

经典题目

  • ZOJ 1010 Area

向量旋转

操作目的

将向量ACM 计算几何向量绕原点逆时针旋转ACM 计算几何向量度。

ACM 计算几何向量

模板代码

Pt rotate(Pt p, double a) {
return Pt(p.x*cos(a) - p.y*sin(a), p.x*sin(a) + p.y*cos(a));
}
上一篇:VSM Import Cluster功能验证二(导入篇)


下一篇:文献综述八:基于JAVA的商品网站的研究