Articles of math

如何在前进中旋转船舶

不知何故,我觉得有一种方法来改善这个混乱,但无法弄清楚。 这是“// —————–”之间的代码。 update(delta) { /* if (!this.arrived) { var angle_dir = this.target.pos.subtract(this.pos); this.angle = Math.atan2(angle_dir.y, angle_dir.x); // Move var dir = this.target.pos.subtract(this.pos); dir.normalize(1); this.pos.x += dir.x * delta * this.speed; this.pos.y += dir.y * delta * this.speed; var distance = Point.distance(this.pos, this.target.pos); if (distance – this.radius < this.target.radius) { this.arrived = true; if (this.onarrived) […]

如何在赛车游戏中模拟引擎RPM?

我目前正在统一开发赛车游戏。 我的汽车通过我实施的扭矩曲线获得扭矩,这是一个简化版本的曲线。但是为了从曲线获得扭矩,我需要input发动机的RPM。 目前我用这个公式得到发动机转速: m_RPM = Wheels.GetAngularVel() * Gearbox.GetDifferential() * Gearbox.arr_gearRatios[Gearbox.GetGear()] * 60 / (2 * Mathf.PI); 这个工作很好,但并不是所有的情况下,例如,如果我爬上山坡,车轮的角速度将会降低,这意味着功率更低,汽车将无法爬升,如果汽车遇到障碍物,也是如此需要大量的扭矩才能超越,但障碍物阻碍了车轮,所以没有RPM。 我想知道如何模拟一个几乎真正的汽车RPM的一些想法,而不是寻找100%的现实主义,有人可以帮助我吗? 谢谢 !

从专业游戏中使用公式是合法的吗?

神奇宝贝系列总共使用5种不同的公式来确定需要多less经验才能达到下一个级别。 同样,在RPG游戏中,每个角色都有一个公式来决定他们什么时候升级,有时是共享的,但通常是不同的。 我希望在我的游戏中拥有这种简单性,我希望每个角色都有一个简单的公式,或者更好的是,每个类都有一个公式。 我的问题很简单。 我能够使用神奇宝贝用于他们的级别(即4n ^ 3/5 , n ^ 3和5n ^ 3/4 )的公式 ,还是我必须拿出我自己的?

如何以一定速度向某一方向发射弹丸(directX 9)

我正在做一个自上而下的2D射手。 我试图让子弹在鼠标方向以恒定速度(以像素为单位)。 我遇到麻烦了。 我的子弹直接射出鼠标45度。 我写了这个方法,设置所有的角度和旅行率。 travelRate:每帧的子弹速度 targetX:以像素为单位的目标X坐标 targetY:以像素为目标的Y坐标 changeX:子弹沿X轴的每帧应该走多远(以像素为单位) changeY:子弹沿Y轴每帧应该走多远(以像素为单位) ent:玩家/ npc射击子弹 我不明白为什么我的子弹在距鼠标45度的位置偏移。注意:我从这个方法中删除了一些不重要的代码。 void Projectile::init(Entity * ent, int targX, int targY) { travelRate = 4; setX(ent->getX()); setY(ent->getY()); targetX = targX; targetY = targY; float deltaY = getX()-targX; float deltaX = getY()-targY; float dLen = sqrt(deltaX*deltaX + deltaY*deltaY); if (dLen == 0) dLen == 1; deltaX […]

如何围绕固定点旋转一个矩形体?

如何旋转一个点的身体? 身体有x,y,速度和角度。 身体相对于其中心的坐标。 附加条件:点的位置和身体之间的距离。

均匀分布2个或更多的形状给定它们的x和y点在边界框内

我有一组dynamic形状的对象,我如何均匀地分布它们水平或垂直。对象被包围框包围,对象被放置在x,y如图所示。 任何人都可以帮助我提供algorithm或伪代码。 更新:很明显,那些停留在极端(形成一个有界的框)的形状保持不变,空间内的剩余物体均匀分布。 我用一个文字处理应用程序来模拟上面的例子。 对于里面的2个物体,

使用预设的时间间隔移动对象

我是一个新手游戏开发者。 我有一个问题。 考虑以下情况。 我有一个简单的游戏只有一个对象 – 一个球。 一个球只能从一边上下移动到另一边。 用户可以设置游戏时间和球迭代次数。 一个迭代就是当球到达最高点并返回到最低点时。 它应该完成用户设置的所有迭代。 这是一个例子。 考虑到用户已经将游戏时间设置为60秒,并且将球迭代选项设置为30 。 我们可以find我们有多less时间60/30 = 2秒的迭代。 所以球应该完成迭代两秒钟。 假设我们有一个已知的帧速率,它是30ms (更新和绘图)。 所以单循环迭代需要2000ms 。 接下来find一个完整的球运动2000/30 = 66次迭代的迭代。 也让我们想象一下,从一边到另一边的距离是2000px 。 所以球需要每次迭代完成4000px 。 最后,我们可以找出我们的运动delta 4000px / 66 = 60 px 。 所以球每循环迭代将移动60px。 但是如果我没有帧速率怎么办,但是当帧速率不是静态的,我们每次都需要关联它时,怎么办呢? 请提出一个algorithm或方法来解决这个问题。 似乎应该有一个function,那就是从游戏开始的时间计算一个球的位置,就像罪(因为球弹跳) 谢谢。

修改2D C#噪声的频率

我开始实施C#噪声function,应该帮助我们在项目的程序生成部分。 代码正在工作,我们有这样的东西: 当我尝试修改噪声的参数,尤其是频率时,问题就开始了。 当我把频率增加到1时,我得到了这个:它显示了一些线条,我认为它不应该。 这是一个300 * 300像素(有点裁剪底部)。 我认为这是不正常的,我认为这是关于文件PerlinNoise.cs的第37行的频率的math公式。 这里是代码的GitHub(我使用SMFL渲染): GitHub链接 我正在使用这个页面上描述的algorithm,我重写了: 原代码链接

将gl_FragCoord范围转换为分段范围

到目前为止,我正在使用着色器,但是我不确定如何使我的着色器gl_FragCoord相对于窗口。 更清楚的是,这是我所拥有的: 而这正是我期望实现的,无论我在哪里放置在屏幕上的片段: 如您所见,着色器将整个窗口作为片段的参考canvas。 我正在玩基于分辨率和片段大小/位置的范围和划分,但无法弄清楚。 第二个图像是根据硬编码数据编译的,需要find一个通用的解决scheme.. 编辑:这是我的vert&frag glsl代码: #version 330 core layout(location = 0) in vec2 position; void main() { vec2 fp = vec2(position.x, position.y); gl_Position = vec4(position.x, position.y, 0.0, 1.0 ); }; $ #version 330 core layout(location = 0) out vec4 color; void main() { vec2 pos = gl_FragCoord.xy/vec2(800., 600.); float r = 0.4 […]

用圆轨道拦截一个物体

我基本上有同样的问题: 我怎样才能拦截圆形议案的对象 我尝试着实现DMGregory的答案,但是看起来我总是从这个星球的轨道上得到最接近的点,从而独立于当前地球的位置。 一次又一次地阅读答案,我实际上无法理解它是怎么回事,所以我要么误解他的答案,要么执行。 我猜我的问题是 error = (planet.positionAtTime(t) – ship.position).squareMagnitude/(ship.maxSpeed*ship.maxSpeed) – t*t; 如果我理解正确的话,我们在给定的时间将船的位置减去行星的位置,并且得到该向量的方形量级(或者我使用的自由度的四分之一),并将其除以船的速度平方。 然后,我们减去这个数字,出于某种原因,我失踪了。 t是弧度还是度数? 我的轨道计算使用度,所以我试图将其转换为弧线弧度,仍然得到相同的结果,但我很好奇。 其中没有任何一个地方是这个星球的现在位置,所以即使这颗行星位于太阳的另一边,对于我而言,误差= 0将总是在距离船的轨道上的最近点。 我在哪里错过了什么? 谢谢