乐趣区

关于人工智能:CGAL学习笔记Kernel介绍

  自己接触 CGAL 曾经有两年多了,但在工作中用到的不是很多,且只是用其中一个小小的性能,所以也没有过多的关注 Kernel 的组成,但在最近的我的项目中,因为调用了大量 CGAL 中的函数,每一个函数用到的 Kernel 不雷同,比方,都是 Point_2,有的用 Exact_predicates_exact_constructions,有的是用Cartesian<double>, 所以凸显出了很多知识结构方面的问题,本文中,次要介绍最根底的 Kernel 模块。(如有不同见解,欢送下方评论)
  为什么要先介绍 Kernel,起因很简略,因为这外面暗藏着计算几何中一个大坑 – 精度问题,举个例子,1.0 + 1.0 = 2.0,从人脑的角度来看,没故障,但在计算机外部,这就是很大的问题,因为会牵扯到一个叫做“浮点精度”的问题,在计算机外部,1.0 可能不是 1.0,而是0.99999 或者 1.00001,所以,0.99999 + 0.99999 != 2.0,所以这就要求咱们在进行C/C++ 写程序时,要避免出现 A == B 这种式子,若要实现此性能,能够应用 abs(A - B) < 0.001,这样的话,就能够无效的防止浮点精度产生的问题,而 Kernel 的抉择,也与此有关。
  Kernel 蕴含根本的几何对象(点、线、面等)以及对这些对象的操作,这些对象被实现成根本的类,从而加强灵活性与适用性。但在目前的应用过程中,最为突出的或者是惟一感到差异的就是几何对象的精度。
  先介绍下最罕用(目前接触到的)的几个 Kernel:

  • CGAL::Simple_cartesian<double>– 最容易了解的 Kernel, 能够简略的了解为数据精度为 double, 当然也能够设置为 float
  • CGAL::Exact_predicates_exact_constructions_kernel– 准确谓词,准确结构的内核,艰深的说能够准确的生成几何对象,能够提供准确的计算,换句话说,就是精度最高。
  • CGAL::Exact_predicates_inexact_constructions_kernel– 准确谓词,不准确的结构内核,简略讲就是生成的几何对象存在舍入误差,就是精度挺高,但在解决的时候精度有所升高。

  比照这三种 Kernal,外围点就是 精度 效率 的均衡,精度越高,效率就越低,反之,效率也就越高。但从介绍看,云里雾里,也只能在应用中进行体现了。当然,CGAL 中还提供了其余的 Kernel,然而目前还没有接触到,所以在本文中不做介绍。

退出移动版