Questions tagged «algorithm»

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

3
添加或删除单元时,如何保持矩形形状?
我有带有行和列的矩形形式的机器人。在从地层中添加或删除机器人时会出现问题。发生这种情况时,漫游器必须重新布置自己,以使矩形形状的纵横比仍大致相同,并尽可能地为矩形。这该怎么做? 一些想法: 添加或删除机器人时,请使用新的机器人总数和所需的恒定长宽比来计算最适合该长宽比的地层的新宽度和高度。然后以某种方式重新调整机器人以适应新的尺寸。 移除机器人后,将其后面的机器人移到其位置,然后继续直到到达编队的尽头。然后通过以某种方式改组后排机器人来尽可能地使后排保持平衡。 另一个完全不同的想法是模仿分子结构保持在一起的方式。通过吸引四个最接近的机器人,然后排斥其余所有机器人,使每个机器人都希望被其他四个机器人包围。击退所有机器人(包括四个机器人),它们太近以至于无法使用平方反比法确保分离。您还需要额外的力来塑造整个结构。但是,这听起来非常昂贵。 更新:因此,研究萨拉赫姆的答案,我想出了一个很好的通用函数,它给出了良好的尺寸。 首先,我解决了下面的宽度和高度联立方程,然后对答案进行了四舍五入。 width/height=aspect ratio of your choice width*height=number of bots 这为您的机器人数量提供了最接近该纵横比的整数矩形。最接近的矩形一半时间太大,一半时间太小(当然,有时会恰到好处,但谁在乎那些矩形)。在矩形是一个案件有点过大,需要做什么需求。后排最终将几乎满,这是理想的。在矩形是一个案件有点太小了,你有问题,因为极小的微小溢出将不得不去到它自己的等级创建了一个等级上它只有几个机器人,它并不十分好看。在某些情况下,差异也很大(大于宽度的一半),在这种情况下,相加或减去一级即可使差异变小。然后,当矩形太小时,添加一列以使其稍大一点。这样做之后,看起来后排机器人将始终至少具有其他排机器人的一半。 更新 获得尺寸后,将其与当前尺寸进行比较。如果新维度的边界较大,则对于每个等级,从下面的等级弹出bot,并将它们推入当前等级,直到该等级上的bot数量等于正面。继续执行该算法,直到获得第二名。使用此算法,机器人将可以有效地适应新的维度。在那之后,我只是将新旧的推到后排。对于新的门面较小的情况,该算法略有不同,但是您可以弄清楚! 接下来还有两个问题。删除,以及一种更灵活的添加方法,其中不必将新漫游器分配给后排,而是在添加新漫游器时最接近它们的位置。

2
如何为图块网格生成导航网格?
我实际上还没有开始为此编写程序,但是我想看看我将如何去做。 假设我有一块瓷砖,所有尺寸都是相同的,有些是可穿越的,有些不是。我将如何从该网格创建多边形的导航网格? 我的想法是取出不可遍历的图块,并从那里的边缘延伸线以制成多边形……这就是我到目前为止所要做的。有什么建议吗?

3
如何计算不规则形状的面积?
我有一个由循环线段集合定义的房间对象,我需要为其计算面积。这些类可以描述如下(用伪代码): class Point { float x; float y; ... float distanceFrom(Point p); } class Segment { Point start; Point end; ... float length(); } class Room { List<Segment> walls; ... float area(); } 房间的墙壁永远不会相交,只能在线段的端点相交,并且创建的任何“子回路”也将被分隔成一个新房间。该解决方案不需要完全准确(可接受10%的误差幅度),也不需要经常计算(<1 / s)。

5
如何在2D地图中检测相连的(但逻辑上不同的)水体?
我有一个二维六角形网格图。每个十六进制单元格都有一个高度值,用于确定它是水还是海洋。我正在尝试一种确定和标记水体的好方法。海洋和内海都很容易(使用洪水填充算法)。 但是像地中海这样的水域呢?与较大的水体相连的水体(“海”和“海湾”的区别仅在于洞口的大小)? 这是我要检测的示例(图像中间的蓝色水域,尽管在技术上已连接,但其标签应与左侧较大的海洋体不同): 有任何想法吗?

2
获取六角形网格中的瓷砖环
感谢这篇文章:六角砖并找到它们的相邻邻居,我能够将相邻砖收集到给定的砖中。但是我几乎迷上了一种算法,该算法只给我一个由偏移量指定的图块“环”。Stack Overflow帖子中给出的算法并不完全在乎它收集图块的顺序。 我知道每个偏移量都会添加6个图块。 偏移1为您提供6个图块(第一个相邻图块)。 偏移2给您12。 偏移3给您18,依此类推。 每个偏移量持续增长6。因此,我认为应该有一个适应这些偏移的规则。我不能完全弄清楚这一点。任何人?

2
为什么在Mathematica中我的天空颜色计算不正确?
我正在尝试根据本文(Perez模型)实现一种算法来计算天空颜色。在开始对着色器进行编程之前,我想在Mathematica中测试该概念。已经存在一些我无法摆脱的问题。也许有人已经实现了该算法。 我首先从绝对绝对亮度的方程式开始Yz,xz并yz按照论文的建议(第22页)进行了计算。的值Yz似乎是合理的。下图显示Yz了浊度T为5时太阳的距离的函数: 函数gamma(天顶,方位角,太阳斜角,太阳脊)计算具有给定的距离和方位角的点与给定位置的太阳之间的角度。此功能似乎也起作用。下图显示了solarzenith=0.5和的角度solarazimuth=0。zenith从上到下(0到Pi / 2)azimuth增长,从左到右(-Pi到Pi)增长。您可以清楚地看到太阳的位置(亮点,角度变为零): 佩雷兹函数(F)和系数已如本文中所述实现。然后,颜色值Yxy应该为absolute value * F(z, gamma) / F(0, solarzenith)。我希望这些值在[0,1]范围内。但是,Y分量并非如此(有关详细信息,请参见下面的更新)。以下是一些示例值: {Y, x, y} {19.1548, 0.25984, 0.270379} {10.1932, 0.248629, 0.267739] {20.0393, 0.268119, 0.280024} 这是当前结果: Mathematica的笔记本与所有的计算,可以发现这里和PDF版本在这里。 有谁知道我必须改变以获得与本文相同的结果? 像C的代码 // this function returns the zenital Y component for // a given solar zenital distance z and turbidity T float Yz(float …
17 algorithm  sky 


5
什么时候应该使用向量/列表?
我可以理解何时使用列表,但是不知道何时使用向量比在视频游戏中使用列表更好:何时可以进行快速随机访问? (而且我知道为什么在列表中插入/删除会更快,因为它只是删除/添加了指针,但仍然必须找到对应的项目...)

14
大澳真的重要吗?
在学术界最糟糕的情况下,Big O会教给其他所有人。与空间复杂度相比,通常情况下的分析,复杂性之上的简化等等。 特别是对于游戏编程和行业,真正重要的是什么,为什么? 参考将非常有帮助。

5
如何生成数独谜题?
我正在尝试制作数独拼图生成器。这比我预期的要难得多,而且我投入的越多,就越难! 我当前的方法是将问题分为两个步骤: 生成完整(已解决)的数独难题。 删除数字直到可解决,并且只有一种解决方案。 在第1步中,由于我使用的是蛮力方法,因此我遇到了一些运行时问题。有没有填写完整数独难题的最佳方法? 在第2步中,应该使用哪种算法“解谜”数独?

3
您如何处理基于概率的游戏中的损失规避?
损失厌恶心理现象是指玩家如何感觉损失是胜利的两倍。 例如,Bite Fight的PvP是基于与角色技能相关的概率的模拟,并且玩家每周在社区论坛中多次表达这种感觉。 如果您不想创建付费游戏,但您想让最差的玩家赢得足够多的胜利,从而对此感到满意,您该怎么做? 问题分为两部分: 您如何从技术上处理它?您是否使用某种数学技术或基于内存的模拟来避免某位玩家连续输掉很多? 从社区的角度来看,您该如何处理?在公共论坛上,您如何处理此类投诉?

5
实时策略游戏联网
我正在为我修读的计算机科学课程开发实时策略游戏。它最困难的方面之一似乎是客户端-服务器网络和同步。我已经阅读了这个主题(包括1500个archer),但是我决定采用客户端-服务器方法,而不是其他模型(例如,通过LAN)。 这种实时策略游戏存在一些问题。值得庆幸的是,玩家采取的每项行动都是确定性的。但是,某些事件按计划的时间间隔发生。例如,游戏是由砖块组成的,当玩家拿下一块砖块时,“能量水平”(该砖块上的一个值)在被获取后应该每秒增加一。这是一个非常简短的解释,应该可以证明我的用例。 现在,我正在做瘦客户机,它们只是将数据包发送到服务器并等待响应。但是,有几个问题。 当玩家之间的游戏发展为残局时,每秒通常会有超过50个事件(由于已安排的事件,如前所述,堆积),然后开始显示同步错误。我最大的问题是,即使客户之间的状态偏差很小,也可能意味着客户做出不同的决定,这些决定会滚雪球变成完全独立的游戏。另一个问题(目前还不那么重要)是存在延迟,必须等待几毫秒,甚至是他们采取行动才能看到结果的几秒钟。 我想知道我可以使用什么策略和算法使最终用户更轻松,更快速,更有趣。鉴于每秒发生的事件数量很高,而且每场比赛有几个玩家,因此这特别有趣。 TL; DR以每秒> 50个事件的速度生成RTS,如何同步客户端?

2
部分可观察的游戏地图-A *是否合适?
我对游戏开发知之甚少,我正在努力寻找寻路算法。 考虑以下设置:代理位于2D地图上,必须找到通向全局已知对象的最短路径,但仅具有有关其本地视野范围内的障碍物的信息(即,仅已知直接障碍物,地图的总体布局未知) )。 而且,每次移动到相邻的正方形都是昂贵的,并且寻路算法应将移动的数量减至最少。 计算效率也非常重要,比准确性更重要。 A *是否适合此用例?

6
您如何并行化二维Boids模拟
您如何以这样的方式编写2D boids仿真程序,使其可以使用来自不同来源(群集,gpu)的处理能力。 在上面的示例中,无色粒子四处移动,直到它们聚集(黄色)并停止移动。 问题是,尽管左上方的实体不太可能与右下方的实体进行交互,但所有实体都可能彼此交互。如果将域划分为不同的段,则可能会加快整个过程的速度。但是,如果实体希望跨入另一个段,则可能会出现问题。 目前,该仿真可用于具有良好帧速率的5000个实体,如果可能,我想尝试使用数百万个实体。 可以使用四叉树进一步优化吗?还有其他建议吗?

3
按顺时针顺序对点数组进行排序
有没有一种算法可以按顺时针顺序对2D点数组进行排序? 在我的情况下,我专门处理直角三角形,所以只有3分。 但是我有兴趣知道是否存在这样的算法,如果不存在,那么按顺时针方向返回三角形的3个点的简单方法是什么? 编辑:我正在尝试相对于多边形的质心顺时针计算点,它是凸的。 更新: 这是我根据选择的答案最终使用的实现,它对性能没有要求,只是偶尔发生一次,因此可以解决。 ArrayList<PVector> pointList = new ArrayList<PVector>(); pointList.add(A); pointList.add(B); pointList.add(C); Collections.sort( pointList, new TriangleVectorComparator(origin) ); return pointList; // Comparator package triangleeditor; import java.util.Comparator; import processing.core.PVector; public class TriangleVectorComparator implements Comparator<PVector> { private PVector M; public TriangleVectorComparator(PVector origin) { M = origin; } public int compare(PVector o1, …

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.