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); }
基本计算
加减法
向量的加减法遵从平行四边形法则和三角形法则。
示例代码
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); }
长度
向量的长度是
。
示例代码
double len(Pt p) { return sqrt(sqr(p.x)+sqr(p.y)); }
数乘
。
向量的数乘是一个向量和实数的运算。如果是零,那么结果是一个零向量,如果
是一个负数,那么结果向量会改变方向。
示例代码
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); }
点积
又称内积。
,其中
是
与
的夹角。
应用
点积可以用来计算两向量的夹角。
示例代码
double dot(Pt a, Pt b) { return a.x * b.x + a.y * b.y; }
叉积
叉积又称外积。叉积运算得到的是一个向量,它的大小是和
所构成的平行四边形的面积,方向与
和
所在平面垂直,
、
与
成右手系。
设两向量与
,它们在二维平面上的的叉积为:
示例代码
double det(Pt a, Pt b) { return a.x * b.y - a.y * b.x; }
性质与应用
叉积拥有两个重要的性质——面积与方向。
两向量叉积得到新向量的长度为这两个所构成的平行四边形的面积,利用这个性质我们可以求三角形的面积。
两向量叉积能反映出两向量方向的信息。如果的符号为正,那么
在
的逆时针方向;如果符号为负,那么
在
的顺时针方向;如果结果为零的话,那么
与
共线。

| 计算结果 | |
|---|---|
经典题目
- ZOJ 1010 Area
向量旋转
操作目的
将向量绕原点逆时针旋转
度。

模板代码
Pt rotate(Pt p, double a) {
return Pt(p.x*cos(a) - p.y*sin(a), p.x*sin(a) + p.y*cos(a));
}
ACM 计算几何向量的更多相关文章
- Archipelago - SGU 120(计算几何向量旋转)
题目大意:有一个正N边形,然后给出两个点,求出剩余的点的坐标. 分析:向量旋转可以求出坐标,顺时针旋转时候,x = x'*cos(a) + y'*sin(a), y=-x'*sin(a) + y'*c ...
- ACM——数的计算
数的计算——(递归(超时)和非递归) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:1050 测试通过:31 ...
- 「浙江理工大学ACM入队200题系列」问题 L: 零基础学C/C++52——计算数列和2/1,3/2,5/3,8/5......
本题是浙江理工大学ACM入队200题第五套中的L题 我们先来看一下这题的题面. 题面 题目描述 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,-- 计算这个数列的前n项和.注意: ...
- HDU ACM 1071 The area 定积分计算
分析: 1.求抛物线方程F(x)=a*x^2+b*x+c: 2.求直线方程f(x)=k*x+b. 3.利用定积分计算F(x)-f(x)在x2到x3之间的面积. #include<iostream ...
- ACM Fibonacci数 计算
Fibonacci数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...
- 2002 ACM 杭电 计算球体积
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2002 注意,要用double 才能过,float过不了. 体积公式要加括号(优先级别)(4 * Π * r ...
- 2019 ACM/ICPC 全国邀请赛(西安)J And And And (树DP+贡献计算)
Then n - 1n−1 lines follow. ii-th line contains two integers f_{a_i}(1 \le f_{a_i} < i)fai(1≤fa ...
- hash值的计算与转换 分类: ACM TYPE 2015-05-07 17:49 36人阅读 评论(0) 收藏
#include <bits/stdc++.h> using namespace std; const int MAXN = 100; const int X = 3; long long ...
- ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)
题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若 最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则 就要另加上不够的数量,具体看代 ...
随机推荐
- SQL 数据排重,去掉重复数据 有用
.最大的错误: 在对数据排重的时候,首先想到的就是Distinct,虽然这很管用,但多数场合下不适用,因为通常排重后还要做进一步处理,比如对编号排重后要按日期统计等. 无法排重的Group by ...
- Python pandas DataFrame操作
1. 从字典创建Dataframe >>> import pandas as pd >>> dict1 = {'col1':[1,2,5,7],'col2':['a ...
- Python开发 第一篇 python的前世今生
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- 安装两个XAMPP或者更新XAMPP时, PHP版本还是旧版本的问题
转载自 : http://blog.csdn.net/everything1209/article/details/53466725 原文 : 问题:我电脑有原先有一个wamp,但是PHP版本为5.5 ...
- sqlServer sa用户登陆失败的解决办法
sqlserver sa用户登陆失败的解决办法 如下图以此模仿: 1.右键-属性 2.找到安全: 3.勾选如图: 4.sa用户密码重置: 5.服务重启:
- PHP+JQuery实现ajax跨域
jQuery实现ajax跨域 1.dataType:'jsonp'2.type: 'get'3.把要传的参数以url方式传出去 url:'http://gameapi.feiliu.com/lqzg ...
- ios app提交之前需要哪几个证书
1.遇到的问题 一款App在别人的机器上开发和发布,现在迭代更新和开发需要在一台新mac机上开发和发布. (使用同一个开发者账号)问题: 1.在新mac机器上开发并导入真机测试,是不是需要从别人的机器 ...
- 关于函数传参的其他问题(const形参实参/可变形参)
const 形参和实参 当形参是 const 变量时,实参是 const 或者不是 const 变量都可以. 实参初始化形参时会忽略掉顶层 const: void gel(const int a){ ...
- ubuntu 上的python不能解析jpeg,png?
在安装pillow之前需要先安装以下支持包1.apt-get install libjpeg-dev libfreetype6-dev zlib1g-dev libpng12-dev2.安装pillo ...
- 精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能)
原文:精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能) 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提 ...