使用 In-Trangle Test 检测极点
文章目录
- Extreme Points
- 策略 Strategy
- `In-Triangle Test`
- `To-Left Test`
- 使用行列式计算有向面积
- Reference
Extreme Points
策略 Strategy
- 问题的转化
- 如果一个多边形是凸包,那么当且仅当他的所有顶点(vertexvertexvertex)都是极点;
- 问题就转化为甄别极点,那么如何甄别极点呢?
In-Trangle Test
,如果成立,则不是极点!
In-Triangle Test
- 无罪推论
- 首先假设所有的点都是极点;
- 然后暴力枚举出所有可能的三角形:
- 逐一判断除这三个点以外的所有极点,如果通过了
In-Triangle Test
,则标注为非极点。
- 逐一判断除这三个点以外的所有极点,如果通过了
To-Left Test
实现
In-Triangle Test
将
In-Triangle Test
转化为三次To-Left Test
:- 对于一个点,如果位于三角形内,那么对于三条边的的
To-Left Test
都会统一的返回True
或者False
!
- 对于一个点,如果位于三角形内,那么对于三条边的的
777 与 888 的问题
使用三刀最多切出 777 块蛋糕,但是对于三条直线,每一条直线的
To-Left Test
的结果都存在True
和False
两种情况,那么就会有 23=82^3 = 823=8 种情况,少的去哪里了?- 实际上对于三条边来说,当三者的
To-Left Test
的结果都是False
时,他们划分出的区域没有交集,如下图紫色标记区域:
- 实际上对于三条边来说,当三者的
使用行列式计算有向面积
实现
To-Left Test
在已知三角形边长时可以利用海伦公式计算三角形面积:
S=(p(p−a)(p−b)(p−c))S = \sqrt{(p(p-a)(p-b)(p-c))} S=(p(p−a)(p−b)(p−c))而已知三个点的二维坐标时,可以利用行列式计算三角形的有向面积,而根据有向面积的符号可以判断出是在左还是在右;
实际上这种方法的好处是,避免了三角函数和除法,而这两种计算会引入浮点数,降低计算的精度。
另外一种做法
实际上使用向量的叉乘也能实现
To-Left Test
,当
a⃗×b⃗>0,(a⃗=pq⃗,b⃗=ps⃗)\vec{a} \times \vec{b} > 0 , \ (\vec{a} = \vec{pq}, \vec{b} = \vec{ps}) a×b>0, (a=pq,b=ps)
时,结果为True
!三维向量叉乘的公式:
对于二维的向量,则更加直观:
a⃗×b⃗=∣a⃗∣∣b⃗∣sinθ=x1y2−y1x2\vec{a} \times \vec{b} = |\vec{a}||\vec{b}|sin\theta =x_1y_2 - y_1x_2 a×b=∣a∣∣b∣sinθ=x1y2−y1x2此时没有第三维
z
,计算结果的正负即可表明 a⃗\vec{a}a 与 b⃗\vec{b}b 是否满足夹角 θ\thetaθ 小于 π\piπ,即s
是否在pq
左边;而且实质上,两种方法是等效的,因为二维向量的叉乘等于所构成的平行四边形的有向面积,即三角形的有向面积的两倍:
带入化简,得到的形式与行列式的做法是一致的:
总结
To-Left-Test
可以有两种实现方法,当已知向量时可以直接使用叉乘,而如果只给出了点的坐标,则可使用行列式。
Reference
计算几何 - 邓俊辉
使用 In-Trangle Test 检测极点相关推荐
- Hough变换原始形式-直线检测
1.直角坐标系与极坐标系中的直线表示 1.1 直角坐标系与极坐标系 中的点的表示及它们之间相互关系 极坐标系(polar coordinates)是指在平面内由极点O.极轴L和极径r组成的坐标系,下图 ...
- 06-机器学习(Haar+Adaboost实现人脸、人眼检测)
机器学习是什么? 机器学习=训练样本+特征+分类器,通过让机器学习的方式,来达到某种功能的过程 深度学习是什么? 深度学习=海量的学习样本+人工神经网络 机器学习需要:样本.特征.分类器.对训练后的数 ...
- PPDet:减少Anchor-free目标检测中的标签噪声,小目标检测提升明显
本文转载自AI算法修炼营. 这篇文章收录于BMVC2020,主要的思想是减少anchor-free目标检测中的label噪声,在COCO小目标检测上表现SOTA!性能优于FreeAnchor.Cent ...
- Anchor-free 目标检测之 ExtremeNet
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自知乎用户"路一直都在"的OUCer&CVer专栏,原文地址: https://zhuanlan.zhihu.com ...
- 图像局部特征(九)--斑点检测LOG算子
原文: 1. 什么是斑点 斑点通常是指与周围有着颜色和灰度差别的区域.在实际地图中,往往存在着大量这样的斑点,如一颗树是一个斑点,一块草地是一个斑点,一栋房子也可以是一个斑点.由于斑点代表的是一个区域 ...
- 基于语音的疲劳度检测算法研究
基于语音的疲劳度检测算法研究 摘 要 疲劳是一种自然现象,是人体的一种自我调节和保护功能.检测疲劳状态对于当今社会从事各行各业都有积极意义.本课题提出了一种基于语音特征参数和概率神经网络的语音疲劳度识 ...
- Cerebral Cortex:岛叶二分法在情绪面孔内隐检测中的应用
文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 导读 岛叶的功能分为后部(PI)和前部(AI),PI主要连接体感区和运动区,AI主要连接额叶.边缘区和扣带回区.研究者报告了当个体的注意力 ...
- 目标检测中的anchor-base与anchor-free
前言 本文参考目标检测阵营 | Anchor-Base vs Anchor-Free 如何评价zhangshifeng最新的讨论anchor based/ free的论文? - 知乎 基础知识 | 目 ...
- 基于图像的三维建模——特征点检测与匹配
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:梦寐mayshine 链接:https://zhuanlan.zhihu.com/p/12893 ...
最新文章
- windows phone (26) ApplicationBar应用程序栏
- gitlab数据迁移
- 使用react全家桶制作博客后台管理系统
- Vue js 的生命周期(看了就懂)
- 无聊,写写工作日记吧.
- 云信小课堂|5分钟快速实现安卓端PK连麦场景
- 【题意分析】1042 Shuffling Machine (20 分)
- 深度学习笔记(25) 池化层
- 用DIB位图显示图像
- 单体 soa 微服务 区别_程序员必须要知道的SOA和微服务的区别
- onlyoffice中文字体下载
- Android 自定义View加属性动画实现动画时钟
- PDMS中如何设置颜色规则
- Stata:中介效应理论及sgmediation命令做sobel检验
- Vision-and-Language Navigation: Interpreting visually-grounded navigation instructions in real env
- A - Linearization of the kernel functions in SVM (模拟)
- 联想Y430P CentOS 7.3 无线网络的配置
- SSTI 模板注入url_for和get_flashed_messages之[WesternCTF2018]shrine
- 大数据处理实践探索 ---- 笔试面试题:Spark基本调优
- CSS中文字间距和行间距
热门文章
- 二叉树寻找节点x的所有祖先
- AR、VR、MR 别傻傻分不清了
- “宠物”项目、“西瓜”项目、怎样打这些“怪物项目”?
- jpg怎么转换成pdf文档
- 用python的opencv画出一棵树的骨架
- Android开发之路之 webview
- 基于 Flutter 视频客户端 Vistor【已开源】
- 0x00007FFEB46D3F57 (mfc140ud.dll)处(位于*.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000
- 图片如何转换成PDF格式?教你一招快速转换
- android自定义控件(星级评分)