叉积

2023-10-31

叉积的计算是线段方法的核心。考虑如图33-1(a)所示的向量p1和p2。我们可以把叉积解释为由点(0,0),p1,p2 和 p1+p2=(x1+x2,y1+y2)所构成的平行四边形的有向面积。另一种与之等价但更有效的叉积定义方式是将之看做矩阵行列式:
p1×p2=det[x1y1x2y2]=x1y2x2y1=p2×p1

p1×p2值为正,则相对于原点(0,0)来说,p1位于p2的顺时针方向;若 p1×p2值为负,则p1位于p2的逆时针方向。图(b)展示了向量p的顺时针和逆时针区域。叉积为0时出现边界情况;在这种情况下,两个向量是共线的,指向相同方向或者相反方向。

  为了确定相对于公共端点p0,有向线段p0p1是在顺时针还是逆时针方向更接近p0p2,我们将p0作为原点从而使问题简化。用p1-p0来表示向量p1=(x1,y1),其中x1=x1x0y1=y1y0,类似的,可以定义p2-p0。然后,计算叉积

(p1p0)×(p2p0)=(x1x0)(y2y0)(x2x0)(y1y0)



下面是叉积的用途:

1.叉积判断线段拐向

这里写图片描述

如上图,可以通过计算向量的叉积来判断拐向,即判断(C-B)×(A-B)的符号。
#若(C-B)×(A-B)> 0 ,则CB在B点顺时针得到AB
#若(C-B)×(A-B)< 0 ,则CB在B点逆时针得到AB
#若(C-B)×(A-B)= 0 ,则A,B,C三点共线。

如图,我们给三个点A,B,C,判断沿着AB到BC,在B点是向右拐还是向左拐。并求出拐的 角度。这个先直接用叉积判断拐向,然后再余弦定理计算角度即可,
用180减去这个角度便是拐的角度。

2.叉积还有一个重要的用处,就是用来求面积

叉积用来求面积,求出的是有向面积,也就是说带正负号,
不过再取一下绝对值就是真正的面积大小了。
比如求三角形ABC的面积,先计算出叉积cross(A,B,C),
那么面积就是fabs(cross(A,B,C))/ 2.0
为什么呢?
我们看一下叉积的定义就知道了,a与b的叉积模为:
|a×b|=|a| |b| sin(a,b)他的几何意义就是以a和b为邻边的平行四边形的面积。

这里写图片描述
3判断点p是否在三角形内。
若在三角形内,则必有S.abc=S.abp+S.acp+S.bcp;若在三角形外,式子就不成立。

4.叉积能判断两直线是否相交。

对于给出的两条线段A1A2,B1B2,判断他们是否相交需要分两步
(1)快速排斥实验
设以线段A1A2和线段B1B2为对角线的矩形为M,N;
若M,N 不相交,则两个线段显然不相交;
判断矩形相交,只需判断某一矩形是否有顶点在另一个矩形内即可。
所以:只有当满足第一个条件时,两个线段才可能相交。
(2)跨立实验
如果两线段相交,则两线段必然相互跨立对方.若A1A2跨立B1B2,则矢量( A1 - B1 ) 和(A2-B1)位于矢量(B2-B1)的两侧,
即:((A1-B1) × (B2-B1) )·( (A2-B1) × (B2-B1))<0。
上式可以改写成:((A1-B1) × (B2-B1)) · ((B2-B1) × (A2-B1))>0。
当(A1-B1) × (B2-B1)=0时,说明A1B1和B2B1共线,但前面已经通过了快速排斥实验,所以A1一定在B1B2上,所以判断线段A1A2是否跨立B1B2的依据就是:
((A1-B1) × (B2-B1)) · ((B2-B1) × (A2-B1))>=0。
同理,判断线段B1B2是否跨立A1A2的依据是:((B1-A1) × (A2-A1)) · ((A2-A1) × (B2-A1))>=0。

这里写图片描述


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

叉积 的相关文章

  • 解决vue3类型“{}”上不存在属性

    刚创建的一个Vue3和Ts的项目 结果使用Vscode打开后 修改了index vue文件就报错了 修改tsconfig json文件 在tsconfig json文件中添加一行代码 就是让ts识别vue文件 include src ts
  • Ubuntu虚拟机中网络中没有网卡

    由于断电等异常操作 导致vmware的ubuntu系统连接不到网络 ping www baidu com 提示 name or service not known 查看网卡配置 vi etc network interfaces 结果发现只
  • Circular placeholder reference 'server.port' in property definitions

    Exception in thread main java lang IllegalArgumentException Circular placeholder reference server port in property defin
  • Cannot run program "scripts\saveVersion.sh"

    用Maven 编译hadoop遇到以下错误 saveVersion sh script fails in windows cygwin hadoop yarn common 半天是个bug 解决方案如下 Index hadoop mapre
  • C++常用经典算法总结

    一 算法概述 排序算法可以分为两大类 非线性时间比较类排序 通过比较来决定元素间的相对次序 由于其时间复杂度不能突破O nlogn 因此称为非线性时间比较类排序 线性时间非比较类排序 不通过比较来决定元素间的相对次序 它可以突破基于比较排序
  • C#如何通过存储过程从数据库中获得数据

    存储过程就是在数据库中写好的函数 C 通过调用存储过程来获得数据 可以在一定程度上提高数据库的安全性 将一些重要的数据封装了起来 那么如何在C 中调用存储过程呢 一 存储过程 环境如下 1 数据库Itcast2014中包含表TblStude
  • VS的C++项目添加LAPACK库简便方法(注:64位+32位,且不用自己编译库)

    需要材料 1 已经编译好的库文件 dll文件和头文件 http icl cs utk edu lapack for windows lapack libraries 这个网站中有已经用minGW编译好的LAPACK库 lib 一共有三个 除
  • 实践DIV+CSS网页布局入门指南

    实践DIV CSS网页布局入门指南 你正在学习CSS布局吗 是不是还不能完全掌握纯CSS布局 通常有两种情况阻碍你的学习 第一种可能是你还没有理解CSS处理页面的原理 在你考虑你的页面整体表现效果前 你应当先考虑内容的语义和结构 然后再针对
  • uniapp使用jsZip打包多个url文件,下载为一个压缩包

    1 需求及前言 可选中多个文件 类型不限png doc xls ppt等 点击下载时 将选中的文件全部打包成一个压缩包给用户 本文讲解jszip这个插件的打包下载使用方法 2 下载插件 npm install file saver npm
  • kafka服务端常见报错

    打印错误ERROR日志 cat kafkaserver log grep i A3 ERROR 日志目录 1 x data 2 x data logs kedacom project namespace dol kafka dol kafk
  • c++四内存区

    c 程序执行时 内存分为四个区域 1 代码区 存放函数体的二进制代码 由操作系统管理 2 全局区 存放全局变量 静态变量和常亮 3 栈区 编译器自动分配释放 存放函数的参数和局部变量等 4 堆区 程序员分配和释放 若未释放 程序结束时有操作
  • # 关于idea中模块文件夹右下角没有蓝色小方块,pom文件显示橘色

    关于idea中模块文件夹右下角没有蓝色小方块 pom文件显示橘色 模块文件夹中右下角没有蓝色小方块 根本原因是因为模块文件夹中没有xxx iml文件 这个本人亲自试验过 将xxx iml文件删除后 模块文件夹右下角小蓝块立马消失 可以参考下
  • 玩好go的切片

    go的slice 入门就会遇到 但这个东西大多数人都是停留在简单的使用 一些干了好几年的老程序员都说不明白里面的道道 这里面坑不少 恰巧今天有空 好好整理下 永不踩坑 1 为什么要用切片 其他语言大多用的都是数组 在go中 数组的长度是不可
  • 尝试构建知识体系

    1 构建知识体系架构是需要 深入 广知 思考 整理 深入 需要反反复复 学致用 用致学 深度思考 锤炼打磨 不同角度不同方式去尝试思考 实践 广知 需要周围东西的敏感度 好学 求知 充满兴趣 我们积累的知识 能否形成体系 却依赖于我们能否做
  • detectron2的结构介绍及代码实现

    detectron2的结构介绍 上一篇文章 detectron2的简介和配置 d948142375的博客 CSDN博客 介绍了怎么配置detectron2 以下简称DET2 到一台ubuntu18 04的远程服务器 本文将介绍为了实现一个基
  • ResNet之残差结构的理解

    ResNet 论文 2015年提出的ResNet 2016年改进后的ResNet 博客 本人实现的2015 2016的ResNet网络复现 深度学习 残差resnet网络原理详解 ResNet详解 通俗易懂版 主干网络系列 2 ResNet
  • VRPTW

    Python解决VRPTW问题 文章目录 Python解决VRPTW问题 一 VRPTW问题是什么 二 Python代码解决VRPTW问题 2 1 引入库 2 2 参数的设置 2 3 算法部分 2 4 主函数 三 数据集和显示的结果图 3
  • 【PyTorch学习】分别使用Numpy和Tensor及Antograd实现机器学习

    本文分别用Numpy Tensor autograd来实现同一个机器学习任务 比较它们之间的异同及各自优缺点 从而加深大家对PyTorch的理解 一 使用Numpy实现机器学习 首先 我们用最原始的Numpy实现有关回归的一个机器学习任务
  • 浅析五种IO模型(包括IO多路复用)

    五种IO模型 同步阻塞IO Blocking IO 即传统的IO模型 同步非阻塞IO Non blocking IO 默认创建的socket都是阻塞的 非阻塞IO要求socket被设置为NONBLOCK 注意这里所说的NIO并非Java的N

随机推荐

  • oracle当中怎么保留两位小数

    1 round保留两位 round 四舍五入 最多保留两位 没有小数的时候不展示 select round 66 667 2 N1 from dual 2 trunc保留两位 trunc 直接截断 最多保留两位 没有小数的时候不展示 sel
  • Windows10 卸载更新GPU Driver

    Windows10 卸载更新GPU Driver 做项目时采集卡编程代码检查无误 而采集到的视频为黑屏 调试推测为GPU Driver需要更新版本 综合了官网教程 百度教程进行 将过程记录如下 第一步 设置系统还原点 创建系统还原点是为了避
  • 惊呼!阿里云云服务器ECS最低3折售卖啦

    11月22日 在云栖大会 广州峰会上 阿里云云服务器ECS宣布新一代产品普惠用户 进行日常优惠的调低 从现在开始 当您选购ECS新一代企业级实例买五年时将低至3折 以ECS企业级及入门级实例为例 5年长期购买的新优惠价格相较于之前 降低了4
  • linux查看sql执行计划,查看SQL执行计划常用方法

    不论是做为开发DBA还是维护DBA 总是或多或少地遇到SQL执行效率或者说SQL调优问题 查看执行计划是必须的 我一般用3种方法查看 一 explain plan for 举个例子就足以说明其用法了 gt explain plan for
  • greenplum 集群初始化问题总结

    greenplum 集群初始化及启动后报错总结 项目背景描述 因 Primary segment 无法恢复 在原实例存在的情况下重新初始化数据库新实例 此文章是真实项目实战中遇到的问题 我仅作为笔记记录问题与修复过程 请查看本博客的阅读者在
  • 两个基于C++-Qt的开源WEB框架

    1 tufao 项目地址 https github com vinipsmaker tufao 主页 http vinipsmaker github io tufao 介绍 Tuf o is a web framework for C th
  • CSS实现文字垂直居中

    一 问题描述 当高度固定或不固定时 单行或多行文本难以实现垂直居中 二 解决方法 1 使用line height属性 将line height设置与元素高度等高 局限性 只适用于单行文本 局限性大 代码 box height 100px l
  • mysql drop记录_MySQL 在线惊心动魄的drop 千万记录表字段

    需要操作一个线上的表 添加字段 先查看磁盘占据大小以及记录数 500W记录 3 3G磁盘空间 hy 3306 orcl20 53 33 gt select table name table rows data length index le
  • 夜莺监控系统部署企业微信机器人告警

    前言 前面我们写了邮件的告警 现在我们来写下企业微信的机器人高级 Git仓库 wechatrobot sender 步骤 创建机器人 创建内部群 gt 鼠标右击 添加机器人 新建机器人 点击新创建一个机器人 创建机器人 输入昵称点击确定即可
  • Verilog 多路选择器(MUX),锁存器(Latch)推荐写法

    Veriog中二选一MUX推荐写法 always a b sel if sel 1 b1 z a else z b MUX为组合逻辑 用always来描述的时候 敏感变量列表中要包含在块中出现的所有变量 如上面代码中的 a b sel 如果
  • 使用Spring boot 构建知识图谱及简单Java GUI学习笔记

    使用Spring boot 构建知识图谱及简单Java GUI学习笔记 一 学习目的 开发一个关于房地产法律相关的智能问答系统 1 在简单Java GUI界面中实现一个科大讯飞语音调用及知识图谱API调用 反馈查询结果 实现一个简单的dem
  • 特征提取算法

    特征提取 1 背景 2 边界预处理 Moore boundary tracing algorithm Chain Codes Freeman Chain Codes slope chain codes SCCs minimum perime
  • 华为OD机试 - 竖直四子棋(Java)

    题目描述 竖直四子棋的棋盘是竖立起来的 双方轮流选择棋盘的一列下子 棋子因重力落到棋盘底部或者其他棋子之上 当一列的棋子放满时 无法再在这列上下子 一方的4个棋子横 竖或者斜方向连成一线时获胜 现给定一个棋盘和红蓝对弈双方的下子步骤 判断红
  • 与ag-Grid一起使用的Vue组件

    ag Grid Vue组件 ag Grid Vue Component 现场演示 Live Demo https www ag grid com https www ag grid com 用Bower安装 Install with Bow
  • VMware虚拟机安装Windows Server 2008 R2

    想必同学们已经开学了 也都进入了军训阶段吧 而很多计算机网络专业的同学们要开始接触到Windows Server了 这也是计算机网络技术专业的专业基础课程 想当年我们实训课学习使用的好像是2008版的 也不晓得现在各个学校会用到哪个版本实操
  • matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合

    一 插值 什么是插值 首先看一下 百度百科的定义 在离散数据的基础上补插连续函数 使得这条连续曲线通过全部给定的离散数据点 从古到今 百度百科的定义一直 欲哭无泪 这是啥意思 简而言之就是 我现在有n个点对应的函数值 但是我想知道 在这个区
  • 科研经验干货帖(包含文献阅读方法、论文书写和投递技巧以及回复审稿意见的注意事项)

    科研经验干货帖 科研小白自己整理科研大神国奖师兄的经验分享笔记 以便自己查看 科研的流程 发现问题 论文idea从这里开始 想要多产生idea要多阅读领域内最好的文章 重现他们的实验 然后解决这些文章存在的问题 因此后面会讲如何阅读文献 核
  • 用matlab画y=cos(x)函数(记录学习过程)

    初始代码 创建横坐标的数据点 x linspace 0 12 1000 计算纵坐标的数据点 y cos x 绘制曲线 plot x y r 设置坐标轴范围 xlim 0 12 ylim 1 1 给y坐标着色 set gca YColor g
  • python爬虫入门心得体会,python爬虫入门和实例

    爬虫不外乎是为了获取网络上的信息 要取得信息 你就得给给服务器发请求 然后服务器把信息发给你 这一步一般较为简单 服务器发给你的一般是一个html文件 拿到文件后 你可能会觉得这是什么乱七八糟的东西 怎么都看不懂 我觉得对于一个非计算机系的
  • 叉积

    叉积的计算是线段方法的核心 考虑如图33 1 a 所示的向量p1和p2 我们可以把叉积解释为由点 0 0 p1 p2 和 p1 p2 x1 x2 y1 y2 所构成的平行四边形的有向面积 另一种与之等价但更有效的叉积定义方式是将之看做矩阵行