没有合适的资源?快使用搜索试试~ 我知道了~
沪公网安备31011502000115号原始软件出版物Acme:一个小型3D几何库Davide Stocco,Enrico Bertolazzi意大利特伦托大学工业工程系ar t i cl e i nf o文章历史记录:收到2021年2021年10月14日收到修订版2021年10月14日接受关键词:计算几何C++Eigen 3MatlaB®Mex文件BVH实时驾驶模拟a b st ra ct在过去的几十年里,有人驾驶和无人驾驶车辆的仿真变得越来越重要。高性能实时DIL(Driver-In-The-Loop)和HIL(Hardware-In-The-Loop)仿真器需要高效、准确和快速的算法来正确建模车辆如何在虚拟环境中移动。大多数时候,虚拟世界是由大量的基本几何实体组成的,这些实体可以相互碰撞并进行相应的修改。快速解决基本几何问题的能力是这种模拟中最重要的角色之一。Acme库是为了高效地对大量基本几何实体执行简单操作而构建的。特别是,该库旨在解决特定的硬实时轮胎-道路接触几何分析。在本文中,我们讨论了Acme库的实现,数据类型,功能的细节,并通过一个示例应用程序来展示这个新诞生的软件的功能版权所有©2021作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本1.0用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX-D-21-00130可复制胶囊BSD(Berkeley Software Distribution)2条款使用git的代码版本控制系统使用C++、Matlab®、CMake的软件代码语言、工具和服务编译要求,操作环境依赖性C++11,Linux,MacOS,Windows,Matlab®2020 a如果可用开发人员文档/手册链接https://stoccodavide.github.io/acme问题支持电子邮件davide. unitn.it1. 动机和意义在过去的几十年里,汽车领域的制造商具体而言,随着高性能CPU(中央处理单元)和GPU(图形处理单元)的出现,焦点越来越多地集中在实时DIL(驱动器在环)和HIL(硬件在环)仿真器上。这些高保真和完全集成的模拟器需要大的计算能力。此外,需要专门设计的代码来满足实时要求和在非常有限的时间间隔内的高精度1*通讯作者。电子邮件地址:davide. unitn.it(Davide Stocco),enrico. unitn.it(EnricoBertolazzi)。1 驾驶模拟器的刷新频率通常为1 kHz。该频率是正确捕获车辆子系统中的典型频率的折衷https://doi.org/10.1016/j.softx.2021.100845处理模拟时的一个重要方面是环境。在驾驶模拟器中,车辆在其中移动的虚拟环境由可以随时间相交和修改的多个基本几何实体因此,以有效的方式解决简单几何问题的能力在达到高精度和因此逼真的模拟中起着关键作用。特别是,当处理大量几何对象时,必须使用适当的数据结构划分3D欧几里得空间。这种数据结构允许有效地访问空间对象。如果没有空间分区,任何搜索都需要扫描数据库中的所有元素,从而大大增加了处理时间。有大量的几何库已经实现,甚至能够解决非常复杂的几何问题,例如2352-7110/©2021作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softx达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号2介绍了仿真环境。此外,诸如CGAL之类的最先进的许可证是在GNU GPL(通用公共许可证)下分发的,这可以限制和限制从它们派生的软件的使用。还有更简单、更紧凑的库,如MatGeom [4]和Wykobi [5],它们分别在BSL(Boost Software License)1.0和MIT(麻省理工学院)许可证。但是,它们不能保证C++和Matlab®环境之间的双重兼容性。 为了方便维护和纠正效率低下的问题,开发了一个新的几何图形库。因此,我们在本文中提出了一个名为Acme的C++库,它提供了快速的基本三维几何问题管理的支持。Acme的第一个版本是在[6]中设计的,用于执行硬实时在这个版本中,几何对象和轮胎对象没有明显的区别。为了使工作更上一层楼,有必要更好地使框架正规化,并制定一个更有效的框架。所有的几何算法,然后收集在一个独立的图书馆。但是,为什么要建立一个新的图书馆,即使有大量的可用呢?模拟世界随着时间的推移而不断发展保持一个简单而强大的最小核心允许将所有算法应用于奇异或病态情况,从而找出任何数值不稳定性,并有效地响应任何维护操作。最后但并非最不重要的是,我们希望减少对C++ Eigen模板库的依赖。2. 软件描述如前所述,软件是用C++编写的,C++是面向对象的通用编程语言中最常见和最快的语言之一。一个有经验的读者肯定知道,自从Bjarne Stroustrup在1985年发明它以来,随着时间的推移,这种语言已经得到了显著的扩展出于这个原因,我们选择在C++11标准上开发我们的代码[7]。2011年的标准带来了编码风格的显著改进和新鲜感,比如新的智能指针类,它们在Acme库中大量 使 用 。 该 软 件 的 源 代 码 可 以 在 BSD ( Berkeley SoftwareDistribution)2-Clause许可证下在线获得联机文档包括C++和Matlab®MexAPI(应用程序编程接口)说明以及使用示例。3软件在MacOS、Linux和Windows操作系统下进行了测试。2.1. 设计选择该软件既不是一个黑匣子,也不是一个GUI(图形用户界面)为最终用户的应用程序。它是一组易于使用和可扩展的C++类,提供了一个基本和可靠的基础,开发人员可以根据他们的特定需求进行扩展。该软件建立在以下支柱上。以实际需求为我们只实现了一个稳定的最小核心库,其中包含当前使用的功能。这样的选择允许渐进地测试软件和较少关注的第三方扩展过程。2 存储库URL:https://github.com/StoccoDavide/acme3 文档URL:https://stoccodavide.github.io/acme建立在最先进的Eigen库上为了提供一个灵活和可扩展的框架,我们决定在线性算法的Eigen模板库上构建Acme。bra [8].这个库对于小向量和矩阵非常有效在计算几何领域中,矩阵和向量的尺寸通常很小,因此,本征库是一个适当的选择。此外,Eigen可以使用LAPACK/BLAS(线性代数包/基本线性代数子程序)[9]在矩阵和向量具有较大尺寸时实现峰值性能。大量使用这样一个经过良好测试和执行的模板库使其能够达到高性能,同时提供了一个非常优雅和富有表现力的API。避免内存泄漏管理动态分配的内存是低级编程语言(如C++)最关键的方面之一通常,最隐蔽的错误是由于不完善的内存分配和释放策略,导致资源的过度使用(内存泄漏),或不可逆的错误条件,破坏程序的稳定性(访问冲突)。 由于C++11智能指针的大量使用,内存泄漏或访问冲突的可能性大大降低。 智能指针作为一组标准库实用程序类出现,它们充当原始指针的包装器。它们为程序员提供各种透明的内存释放策略,适用于多种用例。特别是,SharedPointer对象保留共享所有权。换句话说,多个SharedPointer对象可以拥有同一个对象实例。 只有当拥有该对 象 的 最 后 一个 SharedPointer 被 销 毁 或 分 配 给 另 一 个SharedPointer时,该对象才会被销毁并释放其内存。对象也可以使用delete或自定义删除表达式。多态行为Acme的一个重要特性是它利用了C++的多态性。多态行为是Acme设计模式的支柱之一,它极大地简化了共享几何实体公共接口的异构对象的管理。同样的C++多态行为也存在于Matla b®Mex包装器中。高质量的文件用户可以从上述网站上的文件中受益。C++和Matla b®MexAPI文档和示例都是通过结合Dox Y gen和Sphinx构建的。特别是,DoxY gen从带注释的C++源代码中生成文档。可惜生成的文档的图形质量非常基本。然后使用Sphinx将DoxY gen创建的html文档转换为更漂亮和丰富的图形设计。2.2. 数据类型Acme支持有限数量的几何图元。出于效率和易于维护的原因,我们选择尽可能保持库的重要性。因此,只有必要的类来描述和操纵虚拟路面和轮胎。然而,该库可根据最终用户的需求进行扩展几何实体当然是有组织的在课堂上。每个类都被放置在名称空间Acme中,并公开地继承自虚拟超类Acme。表示同名几何实体的派生类有:点、线、面、线段、三角形、圆盘和球。现在,我们给出一个简短的数学描述的所有数据类型存在于软件中(见图。① 的人。达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号3∈⃗{}[][]。 . . =o−x,y,z≤rx,y,z∈π(o,n)⃗2⏐⏐⏐3⏐y y y}Fig. 1. 所有Acme基本对象的表示。点在3D欧几里得空间中,点表示空间中的精确位置。点pR3由有序三元组表示,即:p=[x,y,z]TPoint类是由虚类的公共继承和Eigen::MatrixBase模板类构建的。应该注意的是,在C++库中,向量和点通常由同一个类描述,而在Acme中,我们提供了一种明确的方法来区分它们。首先 , 区 别 在 于 Point 类 继 承 了 一 个 简 单 的 类 。 另 一 方 面 ,MatrixBase模板类的继承使得可以轻松地从点实体构建数学向量在我们的软件中,矢量和点都由一组列元素表示线直线由原点o和单位方向向量d定义,使得该直线对应于以下集合:(o,d t∈R}拉伊射线由原点o和单位方向向量d定义,使得射线对应于以下集合:(o,d t∈R≥0}平面平面π由平面p上的一般点和单位法向向量n定义,使得该平面对应于集合:π(p,n)={n·(p−[x,y,z]T)=0[x,y,z]T∈R3}段线段σ由两个点P1和P2定义,使得磁盘圆盘φ由半径r、中心点o和圆盘表面n的单位法向量定义。等价地,对于中心点和表面的单位法向量具有相同的符号,圆盘可以由半径r和铺设平面π(o,n)定义,使得圆盘对应于以下集合:φ(r,o,n)=φ(r,π(o,n))=. . .不22T2球球ω由半径r和中心点o定义,使得它对应于以下集合:ω(r,o)={o−[x,y,z]T2≤r2[x,y,z]T∈R3}2.3. 网格工具除了基本数据类型,我们还提供了其他类,这些类在网格或大量实 体 操 作 的 情 况 下 非 常 有 用 。 这 些 对 象 是 : 集 合 , AABB 和AABBtree。收集Collection对象由SharedPointer向量组成来识别Y类型的对象。当需要将大量的可扩展对象实例分组为单个对象时,可以使用此类。这种分组,连同共享指针对象的使用,允许有效的数据操作和安全的内存管理(见图1)。 2)的情况。AABB轴对齐的边界框β由最大点p_max和最小点p_min定义,分别等于:pmax=[xmax,ymax,zmax]Tpmin=[xmin,ymin,zmin]T使得它对应于集合:段对应于集合:σ(p1,p2)={p1+(p2−p1)t<$t∈R,0≤t≤1}β(pmax,pmin)={[x,y,z]T∈R<$x最小值≤x≤x最大值最小值≤≤maxzmin≤z≤z max三角形三角形τ由三个点p1、p2和p3定义,使得三角形对应于以下集合:τ(p1,p2,p3)={t1p1+t2p2+t3p3<$tk∈R≥0,t1+t2+t3≤1}可以看出,这种几何实体非常简单,只需要两个Point对象就可以完全描述它所占据的空间。此外,AABB碰撞检测和/或相交中涉及的算法非常快。特别地,用于AABB-AABB碰撞检测的基本算法可以仅借助于双向比较算子来执行,从而导致轻量化和快速执行。达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号4OOOBuildTree(实体)开始如果Entities=0,则返回 nil;如果#Entities= 1,则返回 AABB(Entities);h.add(root);root←AABB(Entities);return(root);如果w >h且w > d,则split←meanx(root);return(root);E1← {E∈实体|{x(E)<};E2← {E∈实体|质心x(E)≥ split};T1←BuildTree(E1);return(root,T1,T1);否则,如果h> w且 h> d,则split←meany(root);T2←BuildTree(E2);E1← {E∈实体|(E){\displaystyle{<\frac {E};E2← {E∈实体|质心y(E)≥ split};T1←BuildTree(E1);return(root,T1,T2);其他split←meanz(root);T2←BuildTree(E2);E1← {E∈实体|{\displaystyle {\frac {z(E)<}};E2← {E∈实体|质心z(E)≥ split};T1←BuildTree(E1);return(root,T1,T2);结T2←BuildTree(E2);图二. 绑定在两个不同AABB中的两个Collection对象的示例。然后,两个AABB对象被绑定在主AABB中(红色)。AabbTree当需要同时分析大量的非线性对象时,顺序分析它们可能会变得非常耗时。因此,只获得那些可能相交的对象的有限列表是有用的。如前所述,Acme采用的方法是建立一个适当的空间索引。这种数据结构,也称为BVH(包围体层次结构),允许通过分层划分由一组几何实体覆盖的空间来有效地对空间进行建模BVH背后的想法是确定层次结构的不同节点处的简单BVP(边界体积基元),覆盖并粗略拟合对应子树内包含的几何任何碰撞检测或相交问题都可以通过树-树相交来加速。交叉候选仅限于那些包含在碰撞的树叶上的候选[10]。有很多可能的树结构。它们中的一些适合于具有低计算复杂度的更粗略的空间描述,另一些适合于精确的空间索引,但具有高计算复杂度。在Acme li中,AABB(轴对齐边界框)树是从各种可能的解决方案中选择的AABB树具有平衡的复杂性-性能比,可以有效地用于实时应用。通用BVH的性能一般是通过求解交集查询的计算时间来衡量的为了增强BVH性能并因此减少BVP对之间的比较次数,BVH应尽可能紧凑。此外,它还应该最小化每个BVP中包含的边界体积[11,12]。可以使用几种技术来构建AABB树。最常见的是自上而下和自下而上的战略。虽然第一种策略可以轻松地执行树构造[11另一方面,自下而上的策略导致构建更加复杂[11,14]。树构造的典型平均计算复杂度为(nlogn),而两个AABB树的交集具有平均成本其中,n和m是两棵树。如果想要在不使用AABB树的情况下相交两个BVP集合,则计算成本总是(nm),因为第一集合的每个元素必须与第二集合的所有元素进行比较[15]。Acme库中实现的AABB树直接来自[16,17]中提出的AABB树,它已经从 2D到3D案例。为此,如算法1中那样修改AABB树构造算法。算法1:轴对齐包围盒树构造过程。2.4. 基本求交算法基本交点的具体算法是不可避免地排除在讨论的紧凑性明显应该指出的是,通常缺乏用于相交测试的综合性资源。Escherare[18,19],这是所有类型的几何测试和优秀的手册棺材。参考文献[13,20]同样是很好的参考,虽然不完整。关于特定测试的个别文章也可以在有价值的五卷本图形宝石系列中找到[212.5. 软件功能Acme几何库由C++核心和Matlab®Mex包装器组成。 该库的建立是为了有效地创建,相交和销毁基本几何实体对象。可以检查对象之间的几何条件,如平行性,正交性,共线性和共面性。由于Acme库,可以执行的intersection只是那些可能返回单个Acme::INTERSECTION对象的intersection(例如,达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号5球磁盘三角形段平面线点圆盘“““““–表1可以通过Acme库执行的几何条件测试传奇“:平行性,”:正交性,“:共线性,”:共面性,“-:无。点表3CGAL和Acme库之间的比较基于随机创建的对象的105个交叉点的总运行时间相交仅在上述两个库所共有的某些类型的几何图元之间进行。图例T:μ:每个交叉点的平均运行时间(ns),σ2:每个交叉点的运行时间方差(ns)。行⊥□““⊥□⊥□“注册”⊥□⊥□⊥□拉伊–“注册”⊥□⊥□⊥□⊥□⊥□⊥□“这是什么意思?”“□□“…⊥□⊥□⊥□细分市场⋓"⋓"“注册”⊥□⊥□⊥□⊥□⊥□⊥□三角形”“我的意思是⊥□⊥□⊥□⊥□⊥□⊥□⊥□⊥□⊥□⊥□⊥□⊥□球表2可以通过Acme库执行的交集 图例·:始终可以求交,图例:只有实体不共面时才可以求交,图例-:不能求交。3.1. 样例现在我们将看到一个示例,它演示了Acme库的一些功能。特别地,将在C++语言和Matlab®环境中提出相同的示例。这样,我们就可以欣赏到点········线········两个工作环境。在下面的C++和Matlab®我们将创建磁盘的代码:拉伊········φ1(r1,o1,n<$1)=φ1(2,[0,0,0]T,[0,1,0]T)平面·········段 · ·······三角形· ·····三角形-圆盘· ·······球····φ2(r2,o2,n<$2)=φ2(1,[0,0,0]T,[1,1,0]T)这将分别由变量d1和d2表示。然后,我们将它们相交,得到一个我们未知类型的几何实体。然后我们会去了解它是通过方法type(),这将允许我们打印一个字符串描述所获得的对象的类型(参见图3)。C++共面圆盘和三角形的相交可能潜在地返回圆弧和两段,因此不能直接执行)。表1和表2分别总结了可执行的一组几何条件测试和交叉点借助Matlab®Mex,还可以对物体进行操作。在Matlab®环境中进行可视化一个有趣®Matlab Mex的一个特点是它保留了C++多变量。phism。换句话说,在执行®在C++和Matlab中的两个通用对象,输出相交产生的实体的确切数据类型,保持所有检查和验证对最终用户透明。表3显示了CGAL和Acme库在C++环境中的时序性能比较从结果可以看出,速度的提高是显著的其原因可能是CGAL库的更大的复杂性,以及具有比Acme更复杂和完整的框架,最有可能在使用中的对象上执行额外的检查或动态分配。3. 应用实例以下示例是在MacOS系统上生成的,该系统具有6核Intel i7处理 器 2.6 GHz , AMD Radeon Pro 5300 M 4 GB , Intel UHDGraphics 630 1536 MB和16 GB,2667 MHz DDR4 RAM。CPU架构配备L2和L3高速缓存,分别为256KB和12MB。Matlab®12345678910111213%Creeatedisksd1=acme_disk(2,[0,0,0]d2=acme_disk(1,[0,0,0]%Perf或mintersee1 =D1. return(d2);%检查输出实体类型disp(['U t put t e n y is of t ype:',e 1.publicvoidrun();%Plotouttputtf1=数字;D1. f1,f2,f31234567891011121314151617181920212223#Include“acme. hh“#include“ac me_interseection.hh“#include“acme_disk.hh“#include“acme_utills使用一个空间;intmain(){//Creeatedisks实体*d1 =新磁盘(2,点(0,0,0),vec 3(0,1,0));实体*d2 =新磁盘(1,点(0,0,0),vec 3(1,1,0));//Perforrmintersectionentity*e1=acme::intersectin(d1,d2);//检查输出实体类型std::cout<< “你把它放在什么样的地方?“<type()<< “\n“;//Exitproramreturn0;}球磁盘三角形段平面拉伊拉伊线点平面路口CGALAcme速度你-你µσ2µσ2起来线间18.30.2912.20.01328.3倍拉伊-拉伊10300.7398.50.0974121.2x段-段10501.0580.138131.2x三角-三角29203.83240.454121.6x莱恩-拉伊130.02681.90.01646.8x线段170.1046.90.1922.4x线三角形11.30.02285.60.05262.0xRaY-三角形线段-三角形11.6152.280.56825.513.80.8580.247-0。45x1.1x达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号614d2. intf1,intf2(f1,15e1. intf1,intf2,int f3,int f4在这两种情况下,输出如下:>>输出实体的类型:段图3.第三章。 工作示例问题的可视化。请注意,可以通过Matlab®示例代码的第12-15行获得相同的图。3.2. 实时驾驶模拟器正如前面提到的,多亏了Acme图书馆,我们开发了另一个C++库,能够在硬实时约束下评估轮胎与道路之间轮胎通过一组不可变形的加强筋表示,这些加强筋是一组适当大小和距离的“磁盘”对象。3D地图道路由数千个三角形对象组成,这些对象提供了表面摩擦系数缩放因子。三角形数据存储在RDF(道路数据格式)文件或OBJ文件中,在执行时动态加载。RDF和OBJ文件都包含两个部分。在第一部分中,所有顶点通过顶点标识号和一组三个轴来坐标(例如, id x y z)。在第二部分中,顶点被链接,并且在相对三角形表面上的摩擦系数缩放因子被声明,以便组成道路表面的所有三角形(例如,id1id2id3mus)。除了多肋轮胎和道路表示外,我们还提供了自定义的单点和多点接触包络模型。这种对轮胎-道路交叉问题进行几何建模的新方法在准确性和执行时间方面都具有极大的可扩展性。最后一个功能允许在性能较低和过时的机器上满足实时要求在这个特定的应用程序中,AABBtree对象在达到高刷新率方面起着由于道路表面通常由数千个自定义修改的三角形对象组成,因此将轮胎花纹与道路对象逐个重叠是不切实际的。相反,当创建道路表面对象时,也构造其相应的AABB树。当轮胎与道路相交时,也会构建轮胎单叶AABB树。然后通过定制的算法对树进行建模,并且在随后的详细交叉点分析中仅考虑接触轮胎AABB的道路三角形(参见表4)。该框架使该库适用于多种应用,从高级控制测试到赛车驾驶模拟。所实现的轮胎-道路接触模型的两个最重要的特性此外,路面可以由多个平面局部近似。这意味着不仅可以抓取坡度和跟踪倾斜角度,还可以抓取路面表4中等密度路面网格位置上的轮胎-道路交叉点性能数据示例。轮胎肋10道路三角形总数平均交叉点候选12.7442.第四十二章. 28微秒执行时间差异为0。22· 10−3µ s见图4。 轮胎与道路交叉的示例。从图片中可以看出,道路被建模为大量自定义修改的三角形对象。另一方面,Tire对象被建模为一系列形状和距离适当的Disk实例(也称为ribs)。花纹条形状直接从自定义轮胎轮廓函数中提取。图五. 驾驶舱视图截图的实时驾驶模拟器给一个一瞥的图形质量和现实主义。轻微的不均匀。所有这些特性使得模型成为用于在线和离线虚拟ADAS(高级驾驶员辅助系统)测试和/或操纵分析的有用工具(参见图1A和1B)。第4和第5段)。4. 影响免费和开源的Acme库为用户提供了快速轻松地操作几何实体的访问。该方法已成功地应用于达维德·斯托科和恩里科·贝托拉齐沪公网安备31011502000115号7该库的第一个版本是在[6]中开发的,计划与H.PacejkaMagicFormulae轮胎模型[26]用于车辆应用的在线时间最优运动规划和控制[27]。该库具有Matla b®Mex包装器,允许经验不足的开发人员利用软件核心,同时保持低编程语言复杂性。如果决定使用C++接口,该库允许您快速开发高效,内存安全和低冗长的代码。集合对象的使用,结合AABB树和智能指针的大量使用,允许对大量的(潜在异构的)类型为pseudoty的对象执行快速冲突检测、交集和排序。最重要的是,就作者所知,Acme是唯一一个在C++接口和Matla b®Mex包装器中具有相同的多态行为。此外,其他最先进的几何库(如第1节中提到的那些)不能保证C++和Matlab®环境之间的双重兼容性。5. 结论模拟世界总是在不断发展。保持最小稳定核心的能力是未来发展的关键特征。Acme库是一个非常基本和易于使用的C++几何库,旨在成为实时应用程序的最小工具。使这个库简单但同时有效的特点是存在一个基本实体数据类型的最小集合以及AABBtree和Collec- tion对象。用户可以高效地处理大量对象实例。该库允许有效地创建、相交和销毁基本几何图元。因此,顶点是方便的一个简单的碰撞检测工作和更昂贵的时间交叉评估。面向对象的设 计 允 许 有 经 验 的 程 序 员 在 需 要 时 扩 展 库 。 关 于 C++ 和Matlab®API的详细文档,以及一组分步示例,完成了此工具。在第3节中展示了库扩展和实际使用的示例。在其当前版本中,该库实际上非常热衷于表示分别由多个三角形和一组磁盘对象建模的轮胎和路面,并且已经在实时驾驶模拟器上进行了测试。为了保证性能和稳定性,该库已在高密度网格位置和极端情况下进行了访问。即使Acme的自然栖息地是驾驶模拟,我们相信它也可以用于通用的第三方项目,涉及碰撞检测和大型基本几何实体或组合物的相交评估。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作引用[1]CGAL项目。CGAL用户和参考手册。5.2.2. CGAL编辑委员会;2021年。[2]Jacobson A,Panozzo D,et al. Libigl:A simple C++ geometry processinglibrary. 2018年12月28日,中国科学院出版社。https://libigl.github.io/[3]埃伯利·D几何工具引擎,第5版,https://github.com/davideberly/GeometricTools。[4]莱格兰湾用于2D/3D几何计算的Matlab几何工具箱,https://github.com/mattools/matGeom。[5]帕托河Wykobi C++计算几何库,https://github。com/ArashPartow/wykobi.[6]斯托科湾Valutazione real-time del contatto programmatico/stradaconalgorimidedicati. (硕士[7]斯特劳斯特鲁普湾C++编程语言。第四版Addison-WesleyProfessional;2013.[8]Guennebaud G,Jacob B,等.特征值v3。2010,http://eigen.tuxfamily.org。[9]AndersonE,Bai Z,Bischof C,Blackford S,Dongarra JDJ,等. LAPACK用户指南。第三版Philadelphia,Pennsylvania,USA:SIAM; 1999.[10]拉尔森河自适应包围体层次结构,用于高效的碰撞查询。(博士)论文),Mälardalen大学; 2009年。[11]Sulaiman HA,Bade A.用于碰撞检测的包围体层次结构。ComputGraph2012;39-54.[12]Ehran NW,Steurer JA,Leopold JL,Sabharwal CL.用于自底向上BVH构造的对偶图划分。J Vis Lang Comput2014;25(6):764-71.[13]埃里克森角实时碰撞检测。CRC Press; 2004.[14]Omohundro SM.五种球树构造算法。伯克利国际计算机科学研究所,1989年。[15]邢燕生,刘鹏,徐松.基于AABB树和排序算法的高效碰撞检测。IEEE ICCA2010 2010;328[16] Frego M,Bertolazzi E.点回旋线距离及投影计算。SIAM J Sci Comput2019;41(5):A3326-53. http://dx.doi.org/10.1137/www.example.com[17]杨伟杰,王伟杰,王伟杰.样条之间的高效相交的Clothoids。数学计算模拟(MATCOM)2020;176(C):57网址://dx.doi.org/10.1016/j.matcom.2019.10.001网站。[18]Schneider P,Eberly DH.计算机图形学的几何工具。Elsevier;2002年。[19]埃伯利·D稳健且无误差的几何计算。北京:人民出版社,2021.[20]范登卑尔根湾交互式3D环境中的碰撞检测。CRCPress;2003.[21]格拉斯纳河图形宝石。北京:高等教育出版社,1990.[22]阿尔沃·J图形宝石2。北京:高等教育出版社,1991.[23]柯克·D第三章.北京:高等教育出版社,1992.[24]赫克伯特山口第四章.北京:高等教育出版社,1994.[25]佩斯A.图形宝石五。北京:高等教育出版社,1995.[26]Pacejka HB.轮胎和车辆动力学。第三版Butterwest-Heinemann;2012.[27][10]杨文辉,杨文辉.黑箱车辆模型的在线时间最优运动规划和控制的预测神经分层框架。2021年的汽车系统动力学出版中。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功