Tag: 物理

Libgdx,物理,加速和FPS

我在Libgdx框架中制作平台游戏。 我想实现跳到我的角色的能力。 我使用简单的公式: speed += acceleration * delta_time r += speed * delta_time 它运行良好,但仅适用于每秒恒定的帧数。 FPS越低,我的角色越低。 我不知道这种行为的原因是什么,跳跃的高度应该是相同的:/我的代码片段: delta_time=Gdx.graphics.getDeltaTime(); if(input.getUpArrow()){ if(is_in_air==false){ is_in_air=true; speed_y=speed_y_0; } } if(is_in_air==true){ speed_y-=acceleration*delta_time; } else{ speed_y=0; } x+=speed_x*delta_time; y+=speed_y*delta_time; 这里有一个插图(黑点是字符位置): http : //i.imgur.com/tfSTM.jpg

2d球碰撞问题:没有能量守恒

我正在尝试编写一个简单的物理模拟,其中具有不同半径和质量的球在完全弹性和无摩擦的环境中反弹。 我按照以下资源编写了自己的代码: http : //www.vobarian.com/collisions/2dcollisions2.pdf ,我也从这里测试了代码: Ball to Ball Collision – 检测和处理 编辑问题 在Rick Goldstein和Ralph的帮助下,我得到了我的代码(有一个错字……)。 非常感谢你的帮助。 但是我仍然感到困惑,为什么其他算法不适合我。 球以正确的方向反弹,但系统的总能量永远不会被保存。 速度越来越快,直到球刚开始在屏幕上的静态位置闪烁。 我实际上想在我的程序中使用这个代码,因为它比我写的那个简洁得多。 这是我写的function算法(虽然我确实从其他来源获取了第一位)。 它在泡泡类中: public void resolveCollision(Bubble b) { // get the minimum translation distance Vector2 delta = (position.subtract(b.position)); float d = delta.getMagnitude(); // minimum translation distance to push balls apart after intersecting Vector2 mtd = delta.multiply(((getRadius() […]

凸多面体的质心

我有一个封闭的凸多面体,它是由一个凸多边形(面)arrays定义的,这些多边形由三维空间中的顶点数组定义。 假设密度均匀,我试图找到多面体的质心。 目前我用这个伪代码中的算法计算它。 public Vector3 getCentroid() { Vector3 centroid = (0, 0, 0); for (face in faces) { Vector3 point = face.centroid; point.multiply(face.area()); centroid.add(point); } centroid.divide(faces.size()); return centroid; } 这基本上取面的质心的加权平均值。 我不是100%确定这是正确的,因为我无法在线找到正确的算法。 如果有人可以确认我的算法或引用我正确的算法我会很感激。 谢谢。 [编辑] 所以这是我用来查找质心的实际Java代码。 它将多面体分解为会聚在多面体内任意点上的金字塔。 金字塔质心的加权平均值基于以下公式。 C all = SUM 所有金字塔 (C 金字塔 *体积金字塔 )/体积全部 这是(评论很多的代码): // Compute the average of the facial centroids. […]

开源,纯Java物理/动态库

我正在寻找一个轻量级的纯Java物理引擎来进行机器人运动控制的模拟。 我的要求: 刚体物理学 联合约束和力量 凸面物体碰撞检测 轻量级,纯Java,因此可以嵌入我的应用程序中 能够快速运行模拟 舒适地处理50-100个物体 开源 您是否可以推荐任何适合该法案的现有图书馆,而不是重新发明轮子? ps我已经使用Google搜索了 – 我只是希望得到那些已经使用或实施过此类内容的人的诚实意见!

在简单的2D游戏中实现引力

我正在做一个简单的游戏,比如马里奥,一个角色固定在一个位置,地面向左移动,给人一种角色运动的幻觉。 地面由左上角和右下角坐标定义的矩形块组成: private int surfaceMatrix[][] = { {0, 100, 300, 0} // block having 100 height and 300 width }; 跳跃只是在向左移动表面时改变角色的y坐标,因此跳跃看起来像是反转的V字母。 其余的代码 – 动画,移动的精灵 – 非常类似于http://zetcode.com/tutorials/javagamestutorial/movingsprites/ 我想跳得更真实,所以我的问题是 – 我怎么能在这里实施引力? 我必须使用dx的地面,并且角色的dy才能做到,那可以吗? 这里的速度是多少? 每秒像素数……? 怎么做?

JAVA移动和非移动圆的弹性碰撞

我正在尝试编写一个Java移动应用程序(J2ME),我遇到了一个问题:在我的项目中有一些叫做镜头的移动圆圈,以及一个叫做orbs的非移动圆圈。 当射击击中球体时,它应该通过经典的物理定律反弹。 但是我找不到这种算法。 通过轴x和y上的速度(像素/更新)描述镜头的移动。 所有关于圆圈的信息都是已知的:它们的位置,半径和镜头的速度(在轴x和y上)。 注意:在碰撞后,球体不会开始移动,它会保持在原位。 碰撞是两者之间的弹性碰撞,而球体保持静止 这是Shot类中的碰撞解决方法: public void collision(Orb o) { //the orb’s center point Point oc=new Point(o.getTopLeft().x+o.getWidth()/2,o.getTopLeft().y+o.getWidth()/2); //the shot’s center point Point sc=new Point(topLeft.x+width/2,topLeft.y+width/2); //variables vx and vy are the shot’s velocity on axis x and y if(oc.x==sc.x) { vy=-vy; return ; } if(oc.y==sc.y) { vx=-vx; return ; } // o.getWidth() returns […]

音频分析:频率与音调

我正在设计一个简单的调谐器,所以我的目标是显示一个音符名称(A,B,F#)和理论声音与实际输入之间的距离 。 我对音频和信号处理完全陌生,所以我做了一些研究,我发现了一个名为快速傅里叶变换的东西 ,它将分析字节并给出频率。 此外,我发现了一些Java库,如常见的数学和JTransforms,因此我不会自己编写硬代码。 我相信这一切,因为每个范围频率可以直接映射到平等气质的音符,但后来我发现这个新的(对我来说)单词叫做音高 :它被认为与频率紧密相关,但并不完全相同事情并且要难得多,属于那个心理声学领域。 所以我的问题是,有人可以清楚地概述音高和频率之间的差异,也许可以告诉我哪个调谐器处理?

如何修复碰撞响应中的圆和矩形重叠?

由于在数字世界中几乎从未发生过真正的碰撞,因此我们总会遇到“碰撞”圆与矩形重叠的情况。 如何在不与重叠的矩形完美碰撞的情况下放回圆圈? 假设矩形停止(零速度)和轴对齐。 我会用后验方法(二维)解决这个问题。 总之,我必须为t求解这个等式 : 哪里: 是一个回答问题的数字:碰撞发生了多少帧之前? 是圆的半径。 是圆的中心 是它的速度。 和 是返回圆和矩形碰撞的点的x和y坐标的函数(当圆圈处于时 位置,即处于与矩形完全碰撞的位置)。 最近我解决了圆圈之间碰撞的类似问题 ,但现在我不知道函数A和B的定律。