Questions tagged «algorithm»

算法用于计算,数据处理和自动推理。更准确地说,算法是一种有效方法,表示为用于计算函数的定义明确的指令的有限列表。

9
塔防游戏的动态路径算法
我正在做塔防,我需要一个好的路径算法。 我曾经考虑过Dijkstra,但我需要一个可以动态发展的人。删除或添加一条边而无需完全重新计算时,它必须能够自我更新。 如果有帮助,我正在C#中进行编码。

3
使用Elo与两名以上的球员进行的球员排名
我想使用Elo来跟踪某个游戏的比赛之间的玩家排名,但是在一场比赛中最多可以玩4个玩家。我见过像卡尔卡松这样的游戏使用Elo时有两名以上的玩家在玩,但我对Elo超出1-1的比赛并不熟悉。 从维基百科的文章中,我想扩展的两人方程式是: E a = 1 /(1 + 10 (R b -R a)/ 400) E b = 1 /(1 + 10 (R a -R b)/ 400) R x 新 = R x 旧 + 32 *(W – E x),如果X赢,则W = 1,如果X输,则W = 0。 给定两个以上的参与者,E x和W 的计算将如何变化?

1
流动的GPU计算水
我具有土木工程背景,并定期进行水力学和水文分析。他们为这类事情出售学位,但这实际上不是火箭科学。我最近想到了在GPU上为地形实现整个水文和水力过程。我是最近才学习计算着色器的,所以我目前在设计方面比设计并行GPU工作流程要好得多。 您可以使用以下公式计算降雨事件期间产生的水量: Q (CF/S) = c * I (in/hr) * A (acres) 我很难超越计算甚至第一个区域的“面积”。 当前实施概述: 地形是1单位间隔的规则顶点网格 高度图为每个顶点包含一个R32高度值 目前,我只允许沿4个基本方向流动(无对角线) 我正在使用Texture2D [int]作为已经分析过的顶点的模具 当前算法: 当地形工具处于活动状态且现在不处于活动状态时... 清除“模具”。 扫描整个地形以获取最低海拔。 那一点是CS_Flood的初始输入。 CS_Flood使X轴通过。 每个输入顶点都在X-和X +方向上投影最多2048次。 找到具有OOB坐标的相邻顶点将指示该方向上的地形边缘。CurrentPoint附加到BoundaryPoints缓冲区,并且该方向的投影循环终止。这很容易,并且每次都很好用。 高度大于或等于当前顶点高度的相邻顶点将在模具中标记,并添加到NextPass缓冲区中。 高度小于当前顶点高度的相邻顶点表示山脊的顶点,并终止投影环。将来的洪水填充迭代可能会在山脊的底部,“后”侧向上流动,并再次检测到同一山脊。 为此,任何被多次检测到的峰/谷点都不会成为边界点。 仅将一次检测到的任何峰/岭点附加到BoundaryPoints,并终止该方向上的投影循环。 CS_Flood使用X轴通过生成的点作为输入,以相同的代码进行Z轴通过。 现在,CS_Flood继续在两个方向上无限期地交替。最终,每当CS_Flood完成并且NextPass缓冲区为空时,我将终止整个循环。 理想情况下,在那一点上,边界点将包含在自然排水沟上出现的每个顶点。降落在边界内的水滴最终流到相同的低点。水滴降落到边界上,导致“其他地方”。 然后: 在不清除模具的情况下,重新扫描地形以查找最低的非模具顶点。 迭代CS_Flood。 重复直到模具装满(或类似的东西)。 这些颜色很难感知3D。这显示了在整体高程处的轮廓线:( 一个孔,在边缘附近被一个护堤包围) 大约有10种独特的方法可以使顶点流失。为每个颜色赋予独特的颜色,如下所示:( 可见的圆形工具标记,“山脊”很好地显示) 这将CS_Flood生成的每个点(边界或其他)显示为POINTLIST: 该算法几乎总是 有效。有时,它甚至可以正常工作。其他时候,算法显然包含在正确的形状中,但是将继续无限期地输出点。如第三个屏幕截图所示,有时会感到困惑。我必须忽略另一种情况/因素。如果能找到我的疏忽或提出更简单和/或更优雅的方法来解决问题的建议,我将不胜感激。 MissingPoint!可以通过将算法检测到的每个新的BoundaryPoint添加到NextPass缓冲区中来提供帮助。在下一次传递期间,该创可贴所生成的99%的点将浪费少量的GPU时间,以确定它们无法走到无处可去。在第一遍中,发送LowestPoint以及其他NextPass点也将处理此特定情况。 我知道这是合理的,并且如果有足够的时间,我将能够为它做足够的创可贴以完成我想要的事情。如果可能的话,我想以一种更好,更聪明,更快的方式进行操作,但是我没有足够的经验来更好地了解。

3
如何渲染无限的宇宙?
我很好奇游戏开发行业中渲染3d Universe的最佳做法是什么? 更加具体: 数据点是给定的,并且是静态的。每个点都有位置,颜色和大小。 整个数据集比可用内存大得多。 用户应该能够“放大”以立即看到更大的图片; 最幼稚的方法是将宇宙拆分为多维数据集并仅渲染可见的内容。我不确定在这种情况下应如何实现“缩小”。是否应该为每个可能的缩放级别预先计算多维数据集?也许有更好的方法? 我正在寻找技术不可知的解决方案。

3
如何在n个玩家之间平均分配十六进制网格?
我正在制作一个简单的基于十六进制网格的游戏,我希望地图在玩家之间平均分配。该地图是随机创建的,我希望玩家拥有大约相等数量的单元,且区域相对较小。例如,如果地图上有4个玩家和80个像元,则每个玩家将有约20个像元(不必精确定位)。另外,每个玩家的相邻单元格不得超过四个。也就是说,在生成地图时,最大的“块”不能超过四个单元。 我知道这对两个或三个玩家来说并不总是可能的(因为这类似于“为地图着色”的问题),我可以为他们做其他解决方案(例如创建可以解决问题的地图)。但是,对于四到八名球员,我该如何解决这个问题?

3
AI移动定制形状的宇宙飞船(形状会影响移动行为)
我正在设计一个基于网络回合的3D-6DOF太空舰队战斗策略游戏,该游戏很大程度上依赖于船只定制。让我稍微解释一下游戏,因为您需要对游戏有所了解才能提出问题。 我的目标是能够创建具有自定义形状和附加模块(螺旋桨,牵引梁...)的自有舰队,这将给每艘船带来好处和不利之处,因此您拥有许多不同的舰队分布。例如,长船在侧面带有两个螺旋桨将使该船容易绕该飞机旋转,除非您在后面放置许多螺旋桨,否则较大的船将缓慢移动(因此,在移动时会花费更多的“构造”点和精力,它将使只能朝那个方向快速移动。)我计划围绕此功能平衡所有游戏。 游戏将围绕两个阶段旋转:命令和战斗阶段。在订购阶段,您将指挥不同的船只。当所有玩家都完成了命令阶段后,战斗阶段便开始了,并且船舶命令会在一段时间内实时得到解决,然后动作会暂停并进入一个新的命令阶段。 当我想到玩家的输入时,问题就来了。要移动船舶,如果要转向,向前行驶,制动,就地旋转,则需要打开或关闭不同的螺旋桨...这些螺旋桨不必全力以赴,因此您可以实现更大的运动较少螺旋桨的组合。 我认为这种方法有点无聊。玩家不想摆弄马达或其他任何东西,而只想移动和杀死。我打算让玩家向这些船只下达命令的方式是通过目的地和旋转,然后AI将计算正确的螺旋桨功率以实现该移动和旋转。在整个转弯计算中,推进力不必相同(在发出订单后),因此,如果船在移动时做出反应,动态地调整螺旋桨的功率以满足其需求,那将是很酷的,但可能实施起来非常困难,游戏真正不需要它。 在这两种情况下,人工智能将如何决定激活哪个螺旋桨以实现最佳(或至少不是最差)轨迹? 我虽然讲一些方法: 学习AI:船型将通过反复试验来了解它们的运动,通过更多用途来调整其行为,并最终变得“智能”。我不想涉足AI编码领域,我认为这可能会让玩家感到沮丧(即使您可以让它不玩而学习)。 预先计算的时间步长运动:在造船时,将计算给定时间间隔内每种螺旋桨配置和功率的所有可能运动。内存密集,难看,不好。 预先计算的轨迹:与上面相同,但不是每个增量时间,而是整个轨迹,然后将尽可能拟合整个轨迹。在整个战斗阶段都需要固定的螺旋桨配置,并且仍然需要占用大量内存,难看且不好。 持续的暴力逼迫: AI会在整个战斗阶段连续检查所有可能的螺旋桨配置,并预先计算几个时间步长,并据此确定最佳的时间步长。骗局:现在的好东西以后可能就没那么好了,而且它占用的CPU太多,很丑,而且很糟。 单次蛮力逼迫:与上面相同,但仅在模拟开始时就蛮力逼迫,因此在整个战斗阶段都需要恒定的螺旋桨配置。 连续角度检查:这不是完整的运动方法,而是一种丢弃“愚蠢”螺旋桨配置的方法。给定当前螺旋桨的法向矢量和最后一个矢量,您可以根据角度近似估算螺旋桨所需的功率。您必须在整个战斗阶段中连续进行此操作。我最近想出了这个,所以我没想太多。先验地,它也有“现在好了,以后可能就没那么好了”的缺点,它也不在乎其他螺旋桨,它们可以一起做出更好的推进配置。 我真的被困在这里。有任何想法吗?

3
固体作为高粘度液体
我和我的一个朋友正在讨论不同的想法,即允许以一种非常零散的方式销毁世界上的材料,他提出了将固体表示为非常明显的流体的想法。我的直觉是,这可能是:A)非常困难,或者B)资源密集,但是我不确定。 这样的模型对于RPG /冒险rpg / fps是否可行? 编辑:澄清:这个想法是要由该系统处理碰撞和破碎的对象。基本上允许以这种方式处理的任何对象都是可破坏的,而不是使用脚本化可破坏对象。

5
网格上的布尔运算
给每个网格一组顶点和三角形。有谁知道一种算法,或一个寻找的地方(我先尝试谷歌,但没有找到一个好的开始的地方)在所述网格上执行布尔运算,并为生成的网格获取一组顶点和三角形?特别令人感兴趣的是减法和联合。 图片示例:http : //www.rhino3d.com/4/help/Commands/Booleans.htm


4
创建相邻三角形的算法
我有一个系统,您可以单击一次以在场景中放置节点。当您放置3个节点时,它将形成一个三角形。当您放置任何将来的节点时,它将通过将该节点连接到最近的2个现有节点来创建一个新的三角形。 这在大多数情况下都可以正常工作,但是在接近三角形的锐角附近使用时存在缺陷,因为两个最近节点之一通常不应该使用。 例如,请参见下图。品红色三角形是第一个放置的三角形。如果然后单击标记为X的位置,则得到的是蓝色叠加层所在的新三角形。我想要的是一个绿色覆盖的新三角形。(在此示例中,即与洋红色对称。澄清:绿色和洋红色三角形不重叠-绿色在蓝色一个下方延伸到最左侧的节点) 创建新三角形时如何确定要使用哪个2个现有顶点,以使三角形不会像这样叠加? 编辑:搜索最近的边缘会得到更好的结果,但不是完美的结果。考虑这种情况: “最近边缘”测试含糊不清,可以返回AB或AC(因为两者的最接近X的点都在A处)。期望的结果将是AC,以形成没有重叠边的ACX三角形。我如何确保这个结果?(如果可能的话,我宁愿不必作为决胜局进行单独的边缘重叠测试,因为考虑到浮点精度问题,我担心最接近的边缘测试不一定会发现2是等距的。)

1
Voronoi的优点和缺点是什么?
我在YouTube上看过一些Voronoi粉碎视频。 您有什么经验? 时间复杂度,资源复杂度,实现难度...方面的优缺点是什么? 它会模拟真实材料会如何反应吗?
14 algorithm 

2
如何使用Painter的算法获得准确的结果?
不久前,我问如何确定一张脸何时与另一张脸重叠。建议是使用Z缓冲区。 但是,我不能在当前项目中使用Z缓冲区,因此我想使用Painter的算法。不过,我不知道何时表面在另一个表面的后面或前面。我尝试了很多方法,但是它们都在极端情况下失败,或者即使在一般情况下也失败。 这是到目前为止我尝试过的排序方法的列表: 到每个面的中点的距离 到每个面的每个顶点的平均距离 每个顶点的平均z值 最大化每个面的顶点的z值并首先绘制这些值 每个面的顶点的最低z值并绘制最后一个顶点 问题在于,人脸可能距离更近,但距离仍然更远。所有这些方法似乎都不可靠。 编辑:例如,在下面的图像中,以蓝点为中点的表面绘制在以红点为中点的表面上,因为蓝点更近。但是,这是因为红点的表面较大,而中点距离较远。带红点的表面应该涂在蓝色的表面上,因为它更近,而中点距离则相反。 Painter算法中究竟使用什么来确定绘制对象的顺序?
14 3d  algorithm  objects  face 

5
使2D角色在行动中能够使用大量不同设备的最佳方法是哪一种?
我想创建一个2D游戏,但我想让角色在不同的组合(如RPG或类似物品)上穿戴大量的不同设备。 因此,假设用户更换了他的肩膀和裤子,这必须向玩家展示,并且所有这些不同的装备都必须遵循不同的角色动作(击打,被击打,拼写魔术等)。 我看到了一些我想知道最佳解决方案/算法/体系结构的问题。 1-精灵或动画 我应该为每个动作动画的每个设备创建不同的精灵吗? 只是让设备精灵在旋转和平移等代码上直接对其进行动画处理(在Flash上​​使用诸如tween之类的东西),是否更好? 还有其他更好的选择吗?(我真的不喜欢上面的想法) 2-职位 假设在角色移动的其中一个过程中,他开始直接在玩家的视线前方看,但结束了向玩家显示其右侧的动作(例如,如果他将剑从一侧摆动到另一侧)。 如果我们考虑用户的一部分,例如他的头部,则它从前面开始,然后向左转。 这意味着每个头部设备(头盔,帽子等)至少有3个不同的位置。 这肯定会影响第一题的答案。如何做到这一点的最佳方法? 3-层 让我们考虑一个角色移动,他张开双臂旋转360度。在动画开始时,他的右手靠近用户的视野,然后在移动的中间,这可能位于动画中角色的身体后面。 无论在#1问题上有什么选择,您肯定都需要使用某种图层模型使此sprite或动画开始更靠近玩家的视线,然后再更改为远离玩家的视线。 有什么好办法吗? 我知道这个问题很长,很难理解。让我知道您是否认为最好有一些图纸来解释哪个图纸,我将尽力做到这一点。

1
将多个矩形“修复”为较少数量的矩形的算法?
假设我有一个不同形状和颜色的矩形网格,我想减少(合理地接近最佳值就可以了,不需要最佳值)代表相同颜色布局的矩形数。 上图是一个非常简化的情况,矩形之间的空白仅用于可视化-它们实际上是紧密包装的。 可以帮助我做到这一点的方法或算法名称(对Google满意)是什么?

1
在2D瓷砖地图上计算“视锥”的有效方法?
我正在尝试计算一个特定单位在面向地图上的某个方向(在一定范围和朝向范围内)时可以“看到”哪些区块。最简单的方法是向外绘制一定数量的图块,并对每个图块进行射线投射。但是,我希望有一些更有效的方法。图片说一千个字: 红点是单位(朝上)。我的目标是计算黄色磁贴。绿色块是墙(墙位于图块之间,很容易检查是否可以在两个图块之间通过)。蓝线代表的是类似我所说的“光线投射”方法,但我不想这样做。 编辑:单位只能面向北/南/东/西(0、90、180或270度),FoV始终为90度。应该简化一些计算。我在想有一种递归的/基于堆栈/基于队列的算法,但是我不太清楚。 谢谢!
13 2d  algorithm  tilemap 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.