[GIS算法] 矢量(数组基础、编程基础)
文章目录
- 矢量加减法
- 矢量乘法
- 矢量点积dot(a,b)
- 矢量叉积/向量叉乘
- 判断两矢量互相之间的顺逆时针关系
- 在编程中的应用
【有向线段】有一条线段的端点是有先后次序之分的,这条线段即有向线段(directed segment)
【矢量】有限线段p1p2的起点p1在坐标原点,把它称为矢量p2
矢量加减法
二维矢量P=(x1,y1),Q=(x2,y2)
【矢量加法】P+Q=(x1+x2, y1+y2)
【矢量减法】P-Q=(x1-x2, y1-y2)
显然有:
- P+Q=Q+P
- P-Q=-(Q-P)
矢量乘法
a,b和c粗体字,表示向量
名称 | 标积/内积/数量积/点积 | 矢积/外积/向量积/叉积 |
---|---|---|
公式 |
公式一:a·b = ax*bx + ay*by + az*bz 公式二: a·b = |a|*|b|*cosΘ
|
公式一:c=aXb = (ax,ay,az)X(bx,by,bz) = (aybz - azby, azbx - axbz, axby - byax) c的方向遵守右手定则 公式二: |aXb| = |a||b|sinΘ
|
几何意义 | 向量a在向量b方向上的投影与向量b的模的乘积 | c的模等于以a和b为邻边的平行四边形的面积 |
运算结果的区别 | 标量(常用于物理)/数量(常用于数学) | 矢量(常用于物理)/向量(常用于数学) |
常见应用 |
1. 计算垂直于一个平面、三角形、多边形的矢量 2. 判断三角面片的朝向 3. 计算多边形的面积 |
矢量点积dot(a,b)
【名称】点积的名称来源于其符号:a·b。
【计算结果】点积的计算结果是一个模。
【计算方法】点积的计算方式有两种:
a·b = ax*bx + ay*by + az*bz
a·b = |a|*|b|*cosΘ; (可推出^a·^b = cosΘ)
【性质】
- 点积可结合标量相乘。如:设k为标量
k(a·b)= a·(kb) = (ka).b
- 点积可以结合矢量的加减法。如:
a·(b+c) = a·b + a·c; a·(b-c) = a·b + a·-c
- 矢量自己和自己的点积等于该矢量的模的平方。如:
v·v = vxvx + vyvy + vzvz = |v|²
- 两个单位矢量的点积等于他们夹角的余弦值。如
^a·^b = cosΘ
- 利用性质四可以计算出夹角的度数(当度数为0~180之间)。如:
Θ = arcos(^a·^b)
,其中arcos是反余弦操作
矢量叉积/向量叉乘
【名称】叉积的名称也来源于其符号:aXb
【结果】与点积不同,叉积的结果是一个矢量。
【公式】
aXb = (ax,ay,az)X(bx,by,bz) = (aybz - azby, azbx - axbz, axby - byax)
|aXb| = |a||b|sinΘ
【aXb≠bXa,即,叉积不满足交换律;但它满足反交换律 aXb = -(bXa);不满足结合律(aXb)Xc ≠ aX(bXc);】
【举例】二维矢量P=(x1,y1),Q=(x2,y2)
【矢量叉积】
- 原点(0,0),P,Q和PQ组成的平行四边形带符号的面积
- P×Q=x1y2-x2y1,结果是一个标量
显然有:
- P×Q=-(Q×P)
- P×(-Q)=-(P×Q)
判断两矢量互相之间的顺逆时针关系
- P×Q>0,则P在Q的顺时针方向
- P×Q<0,则P在Q的逆时针方向
- P×Q=0,则P和Q共线,但可能同向也可能反向
在编程中的应用
编程中常用矢量叉积来求面积和相对位置
[GIS算法] 矢量(数组基础、编程基础)相关推荐
- Java基础编程——基础语法及介绍
Java基础编程--基础语法及介绍 介绍 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共 ...
- 算法及shell脚本编程基础
bash存在多命令执行的特性,例如:# COMMAND1 $(COMMAND2):还有进程之间的通信(IPC):# COMMAND1 | COMMAND2- 一.命令执行结构与算法 命令执行中,存在顺 ...
- 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- java编写定义圆类和圆柱体类,Java程序基础编程基础
1.在屏幕上输出"你好" //Programmer name Helloword.java public class Helloword { public static void ...
- 1.6编程基础之一维数组 10大整数加法
1.6编程基础之一维数组 10大整数加法 OpenJudge - 10:大整数加法 1168:大整数加法 信息学奥赛一本通(C++版)在线评测系统 P1601 A+B Problem(高精) A+B ...
- 计算机动画算法与编程基础pdf,清华大学 计算机动画算法与编程基础2-图形绘制课件.ppt...
文档介绍: 计算机动画算法与编程基础第二章图形绘制一.空间点的绘制最简单的计算机图形就是在屏幕上某个位置绘制一个点,并用特定的颜色绘制出来. glBegin(GL_POINTS); glVertex3 ...
- 学习算法,你需要掌握这些编程基础(包含JAVA和C++)
前言 小伙伴们好呀!可爱的小编又来了.最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车. 这么美好的一段长假,不用来学习是在是太暴殄天物啦! 加上经常有小伙伴来问小编,学习算法需要 ...
- GIS算法基础——左转算法拓扑生成
GIS基础算法目录 GIS算法基础--左转算法拓扑生成 GIS算法基础--矢量数据压缩道格拉斯普克压缩算法(非递归实现) GIS算法基础--左转算法拓扑生成 GIS基础算法目录 基于JavaScrip ...
- 1.6 编程基础之一维数组 11 大整数减法
1.6编程基础之一维数组 11 大整数减法 方法二 http://noi.openjudge.cn/ch0106/11/ 1169:大整数减法 http://ybt.ssoier.cn:8088/p ...
最新文章
- VC++ 绘制简单电子元件
- Word VBA:批量删除多个分段页面
- opencv实现银行卡号识别
- 卸载ps显示无法连接adobe服务器,PS还在无法安装?无法卸载?通通搞定!
- 【JS】446- 你不知道的 map
- 20P27 Premiere预设70种超酷电影级白天黑夜调色预设模板
- Body-parser
- 英特尔第十代处理器为什么不支持win7_为什么英特尔新推出,i7处理器不支持w7系统,只支持w10...
- 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)
- NOI的1.8.20反反复复
- 条码公司的互联网业务调查分析及展望
- 调整html button位置
- 苹果签名市场变天,频繁封杀到底是什么原因?
- 利用Python发送微信消息的方法
- 智能用户增长: 一站式的消费者资产管理和运营平台
- R语言|paste函数
- 交友网站Circl.es帮你找到另一半
- 20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
- cmd命令windows服务器间文件复制,cmd下面复制文件的速度是多少?
- python实践数学基础——线性代数,概率论与数理统计,基本库的使用(jupyter notebook)
热门文章
- socket:10038错误
- File `xx.sty‘ not found——LaTex解决方案
- mysql查询成绩并排名_一条SQL语句实现查询出成绩名次排名
- 论文投稿指南——中文核心期刊推荐(电工技术)
- 原码,反码,补码的深入理解与原理
- mysql常用汉字库_MYSQL 常用总结【基础】
- Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面
- matlab实用函数汇总
- 英语单词积累8.10
- 美团 CEO 王兴:从 0 到干到 300 亿美金,格局上输了,再多努力都不可能赢