顶点坐标

路径规划学习入门

半世苍凉 提交于 2019-11-29 02:02:18
运动规划简介 当虚拟人开始一次漫游时,首先全局规划器根据已有的长期信息进行全局静态规划,确定虚拟人应该经过的最优化路线。然后全局规划器控制执行系统按照该路径运动。在运动过程中,感知系统会持续对周围环境进行感知。当发现动态的物体或未知障碍时,局部规划器根据这些感知到的局部信息,确定短期內的运动。当避障行为的优先级高于沿原路径前进时,局部规划器就能够通过竞争获得执行系统的控制权,使得虚拟人按照局部规划结果运动。完成对当前感知障碍的规避行为后,全局规划器再次取得执行系统的控制权,使得虚拟人重新回到全局规划路径上,继续向目标点运动。 参考 Dijkstra和A*算法做的效果演示动画 A*算法加入了启发函数,用于引导其搜索方向,A*算法会比Dijkstra算法规划速度快不少 最佳优先搜索(BFS)算法  BFS按照类似的流程运行,不同的是它能够评估(称为启发式的)任意结点到目标点的代价。与选择离初始结点最近的结点不同的是,它选择离目标最近的结点。BFS不能保证找到一条最短路径。然而,它比Dijkstra算法快的多,因为它用了一个启发式函数(heuristic function)快速地导向目标结点。例如,如果目标位于出发点的南方,BFS将趋向于导向南方的路径。在下面的图中,越黄的结点代表越高的启发式值(移动到目标的代价高),而越黑的结点代表越低的启发式值(移动到目标的代价低)

凸多边形最优三角剖分

…衆ロ難τιáo~ 提交于 2019-11-28 19:49:56
一、 问题描述 多边形是平面上一条分段线性的闭曲线。也就是说,多边形是由一系列首尾相接的直线段组成的。组成多边形的各直线段称为该多边形的边。多边形相接两条边的连接点称为多边形的顶点。若多边形的边之间除了连接顶点外没有别的公共点,则称该多边形为简单多边形。一个简单多边形将平面分为 3 个部分:被包围在多边形内的所有点构成了多边形的内部;多边形本身构成多边形的边界;而平面上其余的点构成了多边形的外部。当一个简单多边形及其内部构成一个闭凸集时,称该简单多边形为凸多边形。也就是说凸多边形边界上或内部的任意两点所连成的直线段上所有的点均在该凸多边形的内部或边界上。 通常,用多边形顶点的逆时针序列来表示一个凸多边形,即 P={v 0 ,v 1 ,… ,v n-1 } 表示具有 n 条边 v 0 v 1 , v 1 v 2 , … ,v n-1 v n 的一个凸多边形,其中,约定 v 0 =v n 。 若 v i 与 v j 是多边形上不相邻的两个顶点,则线段 v i v j 称为多边形的一条弦。弦将多边形分割成凸的两个子多边形 {v i ,v i+1 ,… ,v j } 和 {v j ,v j+1 ,… ,v i } 。多边形的三角剖分是一个将多边形分割成互不相交的三角形的弦的集合 T 。图 1 是一个凸多边形的两个不同的三角剖分。 图 1 一个凸多边形的 2 个不同的三角剖分 在凸多边形 P

2016年蓝桥杯B组C/C++决赛题目

♀尐吖头ヾ 提交于 2019-11-28 19:33:42
2016年第七届蓝桥杯B组C/C++决赛题目 点击查看2016年第七届蓝桥杯B组C/C++决赛题解 1.一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着“F”和“B”。 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。 按F,会前进97米。按B会后退127米。 透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。 他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。 或许,通过多次操作F和B可以办到。 矿车上的动力已经不太足,黄色的警示灯在默默闪烁... 每次进行 F 或 B 操作都会消耗一定的能量。 小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。 请填写为了达成目标,最少需要操作的次数。 2.凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。 比如:0, 36, 5948721 再比如: 1098524736 1, 25, 6390784 0, 4, 289, 15376 等等... 注意,0可以作为独立的数字,但不能作为多位数字的开始。 分组时,必须用完所有的数字,不能重复,不能遗漏。 如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案? 3.棋子换位 有n个棋子A,n个棋子B,在棋盘上排成一行。

ICCV 2019 | 从多视角RGB图像生成三维网格模型Pixel2Mesh++

人走茶凉 提交于 2019-11-28 17:12:04
本文发表于 ICCV 2019,由复旦大学、Google 公司和 NURO 公司合作完成。 文章提出了 从几张已知相机位置的多视角彩色图片生成三角网格模型 (3D Mesh)的网络结构。 Github 链接: https://github.com/walsvid/Pixel2MeshPlusPlus 模型架构 得益于深度学习的强大表征能力,也来越多的工作关注三维形状生成任务。之前的工作大多直接从先验中直接学习形状,而 本文使用图卷积神经网络(GCN [1] ),从多视角图片的交叉信息学习进一步提升形状质量。 相比于直接建立从图像到最终 3D 形状的映射,本文预测一系列形变,逐渐将由多视角图片生成的粗略形状精细化。 受传统多视角几何的启发,本文从粗略形状的网格顶点周围采样候选的形变位置,利用多视角图片的统计一致性特征来推理形变的可能位置。大量的实验表明,本文的模型可以生成准确的 3D 形状,不仅从输入角度看似合理,而且可以与任意视点很好地对齐。得益于物理驱动的网络结构模块,本文的精细化粗略形状(Coarse Mesh Refinement)的网络结构还展现了跨不同语义类别、不同输入图像数量和初始网格质量的泛化能力。 研究动机 ▲ 图1. 不同方法在多个视角的3D-2D对齐情况 凭借深度学习的惊人表示能力,许多文章已经证明了可以仅从单个彩色图像成功生成 3D 形状。然而

半边数据结构及其使用

我与影子孤独终老i 提交于 2019-11-28 16:09:00
实体的B-rep表示模型是一非常复杂的模型,要求能够表达出多面体各几何元素之间完整的几何和拓扑关系,并且允许对这种几何和拓扑关系进行修改.在B-rep表示中,体、面、边和顶点是最基本的几何元素,在实体的拼合、显示、分析计算或人机交互过程中,对基本几何元素的下列操作是必不可少的: .增加或删除体、面、边或顶点;   .已知一个体,查找它的所有面、所有边或所有顶点;   .已知一个面或一个边,查找它所属于的体;   .已知一个面,顺序查找围成它所有边;   .已知一个边,查找交于该边的所有面,或着查找该边的邻边,或者查找该边的两个端点;   .已知一个顶点,查找交于该顶点的所有边或所有面. 以上这些基本操作的效率直接影响着整个实体造型系统的效率。一个B-rep数据结构应当方便、迅速地实现几何元素的这些查询或增删操作.为了查询或操作方便,必须建立各几何元素间的拓扑关系,且引入其它辅助元素,例如在许多B-rep数据结构中具有环结点,用来表示面的内、外封闭边界.在B-rep的数据结构设计时,除了需要考虑时间的因素外,还要考虑空间的因素,即模型所占计算机内存的大小,但往往这两方面是互相矛盾的.要想各个几何元素之间查询迅速,必然要在它们之间建立广泛的联系,这样必然增加存储空间的占用量.反过来也是如此,而半边数据结构就很好的权衡了空间和时间的问题。 在构成多面体的三要素(点、边、面)中

深入浅出计算机组成原理:GPU(上)-为什么玩游戏需要使用GPU?(第30讲)

烂漫一生 提交于 2019-11-28 15:52:43
一、引子 讲完了CPU,我带你一起来看一看计算机里的另外一个处理器,也就是被称之为GPU的图形处理器。过去几年里,因为深度学习的大发展,GPU一下子火起来了, 似乎GPU成了一个专为深度学习而设计的处理器。那GPU的架构究竟是怎么回事儿呢?它最早是用来做什么而被设计出来的呢? 想要理解GPU的设计,我们就要从GPU的老本行图形处理说起。因为图形处理才是GPU设计用来做的事情。只有了解了图形处理的流程,我们才能搞明白, 为什么GPU要设计成现在这样;为什么在深度学习上,GPU比起CPU有那么大的优势。 二、GPU的历史进程 GPU是随着我们开始在计算机里面需要渲染三维图形的出现,而发展起来的设备。图形渲染和设备的先驱,第一个要算是SGI(Silicon Graphics Inc.)这家公司。 SGI的名字翻译成中文就是“硅谷图形公司”。这家公司从80年代起就开发了很多基于Unix操作系统的工作站。它的创始人Jim Clark是斯坦福的教授,也是图形学的专家。 后来,他也是网景公司(Netscape)的创始人之一。而Netscape,就是那个曾经和IE大战300回合的浏览器公司,虽然最终败在微软的Windows免费捆绑IE的策略下, 但是也留下了Firefox这个完全由开源基金会管理的浏览器。不过这个都是后话了。 到了90年代中期,随着个人电脑的性能越来越好,PC游戏玩家们开始有了

Unity 渲染教程(二):着色器基础

爷,独闯天下 提交于 2019-11-27 20:48:11
转载: https://www.jianshu.com/p/7db167704056 这是关于渲染基础的系列教程的第二部分。这个渲染基础的系列教程的第一部分是有关矩阵的内容。在这篇文章中我们将编写我们的第一个着色器代码并导入纹理。 这个系列教程是使用Unity 5.4.0开发的,这个版本目前还是开放测试版本。我使用的是build 5.4.0b10版本。 对球使用纹理。 1. 默认的场景 当你在Unity中创建新的场景的时候,你将使用默认的相机和定向的光源。 通过GameObject / 3D Object / Sphere这个菜单项来创建一个简单的球体,然后把这个简单的球体放在原点,并把相机放在它的前面。 默认场景中的默认球体。 这是一个非常简单的场景,但是已经有很多复杂的渲染内容了。为了更好地抓住渲染过程,摆脱所有奇怪的东西是非常有帮助的,首先让我们只关心渲染的基础部分。 1.1 剥离那些和渲染无关的内容 通过菜单项Window / Lighting来查看场景的光照设置。 这将打开一个具有三个选项卡的光照窗口。我们只对默认情况下处于激活状态的“场景”选项卡感兴趣。 默认的光照设置。 这是一个关于环境光照的部分,你可以在其中选择天空盒。这个天空盒目前用于场景背景、环境光照和反射。让我们将其设置为none进行关闭。 在你进行设置的时候,你还可以关闭预计算和实时全局光照的面板

Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形

匆匆过客 提交于 2019-11-27 15:50:27
上一篇博客中我们已经绘制出了一个直角三角形,虽然我们相对于坐标,我们设置的直角三角形的两腰是相等的,但是实际上展示出来的却并不是这样,虽然通过计算,我们可以把三角形的两腰计算一下比例,使它们在坐标上不等,但是现实出来相等,但是当绘制的图形比较复杂的话,这个工作量对我们来说实在太庞大了。那么我们怎么做呢?答案是,使用变换矩阵,把计算交给OpenGL。 矩阵 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。 矩阵常被用于图像处理、游戏开发、几何光学、量子态的线性组合及电子学等多种领域。我们现在相当于是在图像处理或者游戏开发的领域来使用矩阵。在大学的高数课中,有学习到矩阵,很多人在大学学习高数、线性代数之类的课程时,总是觉得学习这些东西没什么用(我也是)。实际上,这些这是对于程序员,尤其是需要做游戏开发、图像视频处理的程序员来说是非常重要的。扯偏了。。。 在三维图形学中,一般使用的是4阶矩阵。在DirectX中使用的是行向量,如[xyzw][xyzw],所以与矩阵相乘时,向量在前矩阵在后。OpenGL中使用的是列向量,如[xyzx]T[xyzx]T,所以与矩阵相乘时,矩阵在前,向量在后。关于矩阵的具体知识,博客中不详细讲解,需要了解的同学可以自行查阅。 如果要自己去写变换的矩阵

Android OpenGLES2.0(六)——构建圆锥、圆柱和球体

ⅰ亾dé卋堺 提交于 2019-11-27 15:46:54
之前的博客中,我们绘制了三角形、正方形、圆形、立方体,今天我们将绘制圆锥、圆柱和球体。能够绘制这些基本的常规几何形体后,其他的常见几何形体的绘制对于我们来说就基本没问题了。 绘制圆锥 由之前的博客,我们大家也应该都知道了,OpenGL ES2.0中物体的绘制重点就是在于把这个物体表面分解成三角形,分解成功后,绘制自然就不成问题了。圆锥我们很容易就能想到把它拆解成一个圆形和一个锥面,锥面的顶点与圆形的顶点,除了锥面的中心点的坐标有了“高度”,其他的完全相同。圆形在Android OpenGLES2.0(四)——正方形和圆形中我们已经绘制过,那么锥面其实对于我们来说也是小case了: ArrayList<Float> pos=new ArrayList<>(); pos.add(0.0f); pos.add(0.0f); pos.add(height); //给圆心相对圆边增加高度,使之形成锥面 float angDegSpan=360f/n; for(float i=0;i<360+angDegSpan;i+=angDegSpan){ pos.add((float) (radius*Math.sin(i*Math.PI/180f))); pos.add((float)(radius*Math.cos(i*Math.PI/180f))); pos.add(0.0f); } float[

OpenGL光照1:颜色和基础光照

这一生的挚爱 提交于 2019-11-27 10:57:19
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 前言 我们简要提到过该如何在OpenGL中使用颜色(Color),但是我们至今所接触到的都是很浅层的知识,现在我们要更深入地讨论什么是颜色,并且还会为学习光照(Lighting)创建一个场景 颜色 首先你要知道我们一直在使用有限的数值来模拟真实世界中无限的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的,然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异 颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB,仅仅用这三个值就可以组合出任意一种颜色 例如,要获取一个 橙色(Coral) 色的话,我们可以定义这样的一个颜色向量: glm::vec3 coral(1.0f, 0.5f, 0.31f); 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色,换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色 太阳光能被看见的白光其实是由许多不同的颜色组合而成的,看下图