Questions tagged «mathematics»

数学问题涉及游戏开发中使用的算术,几何,微积分,公式和其他计算。

1
圆线碰撞检测问题
我目前正在开发一个突破克隆,我遇到了障碍,无法正确检测球(圆)和砖(凸多边形)之间的碰撞。我正在使用“圆线碰撞检测”测试,其中每条线代表凸多边形砖上的边缘。 在大多数情况下,Circle-Line测试可以正常工作,并且可以正确解决碰撞点。 碰撞检测正常工作。 但是,有时候我的碰撞检测代码由于球实际上与砖相交时的负判别而返回false。 碰撞检测失败。 我知道这种方法的效率低下,并且使用了轴对齐的边界框来减少测试砖的数量。我主要关心的是下面的代码中是否存在任何数学错误。 /* * from and to are points at the start and end of the convex polygons edge. * This function is called for every edge in the convex polygon until a * collision is detected. */ bool circleLineCollision(Vec2f from, Vec2f to) { Vec2f lFrom, …

4
如何实施减速?
我之所以说“减速”,是因为我目前不使用加速;我的意思是将速度移回零,最终停止。 我是向量的新手,但对物理学等却不太了解。通常如何处理“减速”? 我现在所拥有的有效,但似乎有些破旧。 update:function(Game, t, dt) { var speed = Game.Input.isKeyDown('shift') ? 8 : 4; if (Game.Input.isKeyDown('a')) { this.velocity.i -= speed; } else if (Game.Input.isKeyDown('d')) { this.velocity.i += speed; } else { if (Math.abs(this.velocity.i) > 3) { this.velocity.i += (this.velocity.i > 0) ? -speed : speed; } else { this.velocity.i …

2
对于2D Vector类,是浮点型还是双精度型?
我目前正在为我们的工作室编写一个基于OpenGL的跨平台小型2D游戏引擎。当我研究使用哪种2D Vector类时,偶然发现了三种不同的设计范例: 浮动和按价值致电,就像在Gamasutra的这篇文章中一样。似乎速度很快,但精度却很低(另请参见Thread)。专业版:快速,便携式且与大多数库兼容。 双重和按引用致电。如果我正确理解了以上文章,我也可以使用2个双精度变量而不是4个浮点数。根据上述线程double仍然比float慢。 double和float的模板:广泛流行的书籍“ Game Engine Architecture ”使用模板,使得可以根据需要使用float和double。明显的缺点是代码膨胀。另外,我怀疑是否可以在基本不编写两个类的情况下优化代码。 我希望了解您在内部引擎中使用的解决方案,以及例如流行游戏引擎的精确度,因此我可以决定在引擎中实施哪种解决方案。目前,我正在考虑仅使用float精度并使用它。

2
如何使播放器在地形上平稳滑动
我正在制作一个等距游戏。当玩家尝试对角地走进墙壁时,我希望他们在墙壁上顺畅地滑动,因此将使用合法的移动部分,并丢弃法线方向的任何东西。墙壁可以是任何角度,而不仅仅是垂直或水平,并且播放器可以360度运动。 我觉得自己快到了,但是我无法把最后一块放到位。 更新:大家好消息!我有工作。但是...我有些困惑,我应该规范什么,不应该规范什么。法线只需要是一个单位向量,对吗?但是然后我将其与输入混合在一起,因此我将其标准化了-我错了吗? 顺便说一句,我还发现我需要将播放器朝法线方向推1个像素,这样它们才不会卡在东西上-效果很好。

2
如何计算击中移动目标的射击角度和速度?
我正在开发一款2D Android游戏,并且正在为AI弹丸制定一种瞄准算法,以沿着路径或自由移动击中敌人。目前,它只是计算目标在一定距离后的位置,并发射弹丸以达到该距离。当然,这意味着要改变弹丸速度以达到目标。 有没有人有简单的算法(最优的算法)的技巧来计算弹丸何时需要发射以及如果它只能以恒定的速度行进时需要瞄准什么地方?是说射弹的速度是目标的两倍? 我能想到的唯一方法就是搜索,而且看起来很大。
11 2d  android  mathematics  ai  aiming 

3
如何从视图矩阵获取翻译
如何从摄像机的视图矩阵中检索摄像机的世界空间位置?我对这个问题所见的唯一答案表明翻译是在最后一行/列中,但由于矩阵包含[x(右)点,y(向上),z(点)外观),因此该操作无效。
11 3d  mathematics  matrix 

3
梯田山特征
我希望复制几天前在投资组合/博客网站上发现的程序性地形效果。 引用该地点,通过“将[最终高度]与某个高度范围内的某些阻尼值相乘,以创建美丽的峡谷特征”来生成梯田。 我想知道,有人能提供更多技术示例或程序来解决此问题吗?在过去的一周中,我一直在研究和学习很多有关程序性地形/纹理方法和实践的方法,但是我仍然没有遇到任何能详细解释什么是“夹紧”的东西,并且我开始感到沮丧。

3
RPG如何平衡线性损伤公式?
我正在为RPG开发伤害公式。我检查了许多流行的标题公式以作为参考(最终幻想,计时触发,金太阳和恶魔城),并且大多数似乎都使用线性函数。 我的问题是,对于线性函数,在每次升级时,损害增加的百分比会下降。例如,当您从Lvl 2变为Lvl 3且伤害增加50%时,然而,当您从Lvl 50变为Lvl 51时,一次攻击只会对同一个敌人造成0.5%的伤害。 再加上XP在这些游戏中成倍升级的事实,对我来说没有意义。因此,尽管我很想放弃自己游戏的这种功能,但由于许多我最喜欢的游戏都在使用某些功能,所以我觉得我一定会缺少这些功能。此外,我玩过这些游戏,却从未注意到。 例如:黄金太阳的伤害计算很简单:伤害=攻击-防御。下面的口袋妖怪的伤害公式稍微复杂一些,但绝对伤害的增长在每个等级上都会降低。 我是否正确地认为在这些游戏中,每个级别的伤害增加百分比较低? 他们如何平衡游戏,使关卡在游戏后期仍然很重要?

2
将第三人称相机旋转到目标
我有一台第三人称相机,它不直接看玩家,而是在他面前的某个地方。 当用户进入拍摄模式时,我希望相机转向播放器以面对目标。 在上图中。“ O”是玩家(来源),“ L”是角色,“ C”是摄像机位置,“ T”是目标。我想旋转后视线C-> L,以使其绕原点(“ O”)经过T(C'-> L'-> T')。 基本上,我需要找到在图片中以红色显示的角度alpha。 我将相机位置存储在这样的结构中: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } 因此,如果可以找到所需的角度,则可以执行以下操作: cam->absoluteRotation = cam->absoluteRotation * alpha; 为了让玩家始终注视目标。 如果look望通过原点,我可以简单地做 Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion …

5
如何正确在相机后面投射点?
我正在制作3D游戏,在其中将感叹号放在关注点上方。 为了找出应该在2D屏幕中放置标记的位置,我手动将3D点投影到标记应放置的位置。 看起来像这样: 看起来还不错 当标记位于屏幕之外时,我只需剪切坐标即可使其适合屏幕。看起来像这样: 到目前为止,这个想法进展顺利。但是,当关注点在相机后面时,得到的X,Y坐标将反转(正/负),并且我将标记显示在屏幕的对角,如下所示: (投影然后夹紧的点是标记的尖端。不要介意标记的旋转) 这是有道理的,因为平截头体后面的坐标在X和Y中是反转的。所以我要做的是在它们位于摄影机后面时反转它们的坐标。但是,我仍然不知道将坐标反转时的确切条件是什么。 当前,这是我的投影代码的样子(在带有SharpDX的C#中): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, …

3
我可以从A跳到B吗?
我正在为侧滑车制作一些基本的AI,并且我需要知道AI单元是否可以仅通过跳跃就可以从A点到达B点。 我的角色的飞行轨迹有点用处不大,因为他们可以在空中施加力量(例如在Jazz Jackrabbit 2中),因此与经典弹丸的轨迹不同: 投掷或发射的弹丸将采取(...)没有推进力的路径。 ……我想我的问题更多是关于带有推进力的弹丸(例如火箭)。 为了说明这一点,这是我跳并不断按下“左键”时飞行曲线的样子(在左端看起来有所不同,这是我在空中进行一些操作的地方): 飞行期间施加的力始终平行于X轴,因此,如果我按住“左”,则为F =(-f,0);如果我按住“右” ,则为F =(f,0)。 他的动作非常像跳台滑雪者: 因此,它与经典的抛物线轨迹有很大不同(来源:Wikipedia): 更困难的是,我正在模拟简单的空气阻力,因此我的角色只能加速到某个最大速度值。 这是通过在相反的方向施加较小的力来完成的: b2Vec2 vel = body->GetLinearVelocity(); float speed = vel.Normalize(); //normalizes vector and returns length body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() ); AIR_RESISTANCE_MULT是一个常数,在我的情况下等于0.1。 假设我的角色是一个非常小的点。 而且我没有考虑障碍,所以我的问题是这样的... 在给定初始速度V的情况下,如何确定(至少可靠地猜测)我在跳跃时应用于角色的脉冲J =(0,-j),重力G =(0,g),力F =(+ -f ,0)如果我们真的决定考虑空气阻力 (这是可选的) ,那么在飞行和AIR_RESISTANCE_MULT期间会持续应用(这是可选的),是否某个点位于我的角色将采用的路径绘制的曲线下方? 我实际上不知道从哪里开始计算,实际上,我不一定对确切的答案感兴趣。良好的破解/逼真度将非常棒,因为AI绝对不需要完美运行。 …

1
如何在RPG中平衡经验获取
我目前正在开发一款具有经典经验值和升级机制的RPG游戏。玩家杀死怪物,获得经验值,并在它们收集足够多并变得更强时升级。 如何平衡达到每个等级所需的Exp点数和每个等级上每个怪物授予的Exp数?

4
星际经济模拟
我正在设计一款让人想起Elite或Escape Velocity的游戏,那些古老的太空交易游戏,您要在太空中扮演旅行商人。 我希望游戏的经济至少类似于真实的经济。我可以查看哪些可用资源以了解执行模拟所需的算法? 一个很大的障碍是我在数学方面非常可怕。因此,简单的解释将是理想的。 我认为星际经济与全球经济没有什么不同。某些物品只能在某些地方制造(由于资源和技术水平的原因),运送物品需要花费时间和金钱,不同地方的人们需要不同的物品……只是城市,而不是城市。 谷歌搜索“经济学模拟算法”和类似术语几乎没有用处,我没有什么背景需要了解。 有人知道我可以研究的任何有用资源吗?

3
惯性张量的计算
我承认,这是一个复杂而冗长的问题,我还不太了解,所以我将尽力解释。 简短版:是否有通用的c ++ / physx公式可根据对象形状计算惯性张量? 长版: 对于我们的物理学,我们需要指定x,y和z惯性张量。当前,我们的方法几乎只是基于质量的比率。因此,如果一个对象在X轴上较长,而在Y和Z上较薄,并且质量为10000,则将Z和Y设置为7000,将X设置为3000。(这不确切,只是给出一个想法) 这比较好用,但是我们最大的问题是当某处存在关节不稳定性时,我们必须不断猜测张量,直到找出最合适的。如果我们进行非常大的物理模拟,而20个以上的关节中有一个关节使所有其他关节失去稳定性,则这将变得非常耗时。 我正在研究的是一个函数,它将采用对象的边界框并希望计算出相对准确的张量。我已经从http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors进行了一些数学运算,并制作了一个函数,该函数基本上可以像下面的类似旋转一样工作。 或者,如果旋转结束,则如下所示: 因此,这似乎给了我类似于我们一直使用的方式的结果,但是我不想切换到这种方式而不确保它能正常使用。以下是基于具有立方体和中心枢轴的第一个图像的我的函数的代码。 NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m ) { float width = boundingBox.GetSizeX(); float height = boundingBox.GetSizeZ(); float depth = boundingBox.GetSizeY(); float xTensor = 0.083f * m*(height*height + depth*depth); float yTensor = 0.083f * m*(width*width + depth*depth); float zTensor = …

6
是否有(一个)单调非递减噪声函数?
我想要一个函数,该函数可以使对象随时间从A点移动到B点,以使其在某个固定时间到达B点,但是它在任何时候的位置都会以连续的方式随机地受到扰动,但是永远不会向后退。对象沿直线移动,所以我只需要一个维度。 从数学上讲,这意味着我正在寻找一些连续的f(x),x∈[0,1],使得: f(0)= 0 f(1)= 1 x <y→f(x)≤f(y) 在“最”点,f(x + d)-f(x)与d没有明显关系。(该函数不是均匀增加的或不可预测的;我认为这也等同于说没有导数是常数。) 理想情况下,我实际上希望以某种方式拥有这些功能的族,提供某种种子状态。对于我当前的使用,我至少需要4位种子(16个可能的函数),但是由于没有太多的余地提供更多。 为了避免误差积累的各种问题,我宁愿功能并不需要任何的内部状态。也就是说,我希望它是一个真正的功能,而不是编程的“功能”。

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.