当前位置: 首页 > news >正文

1.凸包、极点、极边基础概念

目录

1.凸包

2.调色问题

3.极性(Extrem)

4.凸组合(Convex Combination)

 5.问题转化(Strategy)​编辑

6.In-Triangle test

7.To-Left-test

8.极边(Extream Edges)


1.凸包

凸包就是上面蓝色皮筋围出来的范围

这些钉子可以转换到坐标轴中,横纵坐标表示颜色的比例

2.调色问题

上述问题可以进行一个抽象,抽象为一个color space

结论

  • 如果有1种颜料可以被2种颜料勾兑出来,它必然位于二者之间的那条连线上
  • 如果有1种颜料可以被3种颜料勾兑出来,它必然位于三角形内
  • 勾兑比例与距离成反比

3.极性(Extrem)

蓝色的为极点

极点上存在一条直线,使得所有的点落在它的一侧

4.凸组合(Convex Combination)

为什么最小值必须>=0 ?

因为这种颜色大不了不用,但也不可能是负的

 5.问题转化(Strategy)

如果是极点那么久不可能在一个三角形的内部,所以采用排除法,剩下的就是极点

6.In-Triangle test

遍历所有可能的三角线组合,排除非极点

低效做法

更加聪明的做法,如果一个点位于三条直线的left,那么它一定位于三角形内

7.To-Left-test

如何高效的判断一个点是否是包含在一个三角形的内部是计算几何里的一个基础问题。

In Triangle Test问题也可以用来解决计算几何里的一个基础问题就是 凸包问题 。

问题描述

给出一个点s,判断其是否在一个三角形(p, q, r)内部。

问题求解

判断一个点是否在三角形内部等价于对于三条边分别做To left test的结果一致。

那么现在的问题就是如何高效和精确的实现To left test。

只有s位于pq这条线段左侧才会取正。

关于这个可以使用空间坐标系的海伦公式来求解。

              | p.x p.y 1 |

2 * S =   | q.x q.y 1 |

              | s.x s.y 1 |

并且这个公式是有向的,当三个点是逆时针排列的时候该行列式的返回结果是正数,当三个点是顺时针排列的时候行列式的返回结果是负数

1

2

3

4

5

6

7

8

bool to_left_test(int[] p, int[] q, int[] s) {

    return area2(p, q, s) > 0;

}

int area2(int[] p1, int[] p2, int[] p3) {

    return p1[0] * p2[1] + p1[1] * p3[0] + p2[0] * p3[1] -

        p2[1] * p3[0] - p1[1] * p2[0] - p1[0] * p3[1];

}  

To left test 几乎贯穿了整个计算几何,不仅是计算凸包的核心,也是很多其他计算几何问题的关键算法。

例如:判断两条线段是否相交,只需要做4次to left test即可。 

8.极边(Extream Edges)

极边:所有的点落在同一侧,就是极边

算法实现

极边的算法效率高于极点的算法效率

参考

In Triangle Test / To Left Test - hyserendipity - 博客园


http://www.mrgr.cn/news/98793.html

相关文章:

  • Linux 常用命令总结
  • 手动安装 VMware Tools 并设置虚拟机共享 Windows 文件夹
  • 老小区门禁安居宝AJB-FJ10FB数据传输格式
  • 【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法
  • 协享云图分析--4图片模块
  • Linux系统编程学习 day4 进程
  • C++11:模板元编程(TMP)基础
  • 让SQL飞起来:搭建企业AI应用的SQL性能优化实战
  • USART讲解
  • OpenHarmony Camera开发指导(五):相机预览功能(ArkTS)
  • Ubuntu20.04配置cartographer记录
  • 【问题】一招解决vscode输出和终端不一致的困扰
  • 十二种存储器综合对比——《器件手册--存储器》
  • MATLAB 控制系统设计与仿真 - 34
  • Java虚拟机(JVM)平台无关?相关?
  • 22、字节与字符的概念以及二者有什么区别?
  • 《Java 并发编程实践》阅读笔记(一):线程重要性
  • 【教学类-102-13】蝴蝶外轮廓03——Python三色图修图代码+制作230灰度的蝴蝶描线图(可以改变描边线条的灰色深浅度)
  • C++编译与链接:从源码到可执行文件的魔法之旅(Visual Studio实践)
  • android如何在生产环境中做到详实的日志收集而不影响性能?