标签: physics

塑造人类在足球场上运行

在足球比赛中,我正在使用转向行为来计算转向力.这部分还可以.但是,我正在寻找实现简单的2d人类运动的最佳方法.

例如,当转向力与当前速度或航向矢量之间的cos(角度)低于0.5时,玩家不应该"操纵"(或简单地将由转向力计算的加速度)添加到其当前速度,因为它看起来好像玩家是车辆.人类在方向发生重大变化时会减速,当速度减慢时,它会开始向新的方向加速.

有没有人对如何实现这种行为有任何建议和想法?提前致谢.

physics

9
推荐指数
1
解决办法
546
查看次数

物理游戏编程box2d - 使用扭矩定位类似炮塔的物体

这是我在尝试使用LÖVE引擎实现游戏时遇到的问题,该引擎覆盖带有Lua脚本的box2d.

目标很简单:类似炮塔的物体(从顶部看,在2D环境中)需要定位自己,使其指向目标.

炮塔位于x,y坐标上,目标位于tx,ty.我们可以认为x,y是固定的,但是tx,ty往往会从一个瞬间变化到另一个瞬间(即它们将是鼠标光标).

转台有一个转子,可以在任何给定的时刻,顺时针或逆时针施加旋转力(扭矩).该力的大小有一个名为maxTorque的上限.

转台还具有一定的转动惯量,其作用于角运动,与质量作用于线性运动的方式相同.没有任何摩擦,因此如果它具有角速度,炮塔将继续旋转.

炮塔具有较小的AI功能,可重新评估其方向以验证其指向正确的方向,并激活旋转器.这发生在每dt(每秒约60次).它现在看起来像这样:

function Turret:update(dt)
  local x,y = self:getPositon()
  local tx,ty = self:getTarget()
  local maxTorque = self:getMaxTorque() -- max force of the turret rotor
  local inertia = self:getInertia() -- the rotational inertia
  local w = self:getAngularVelocity() -- current angular velocity of the turret
  local angle = self:getAngle() -- the angle the turret is facing currently

  -- the angle of the like that links the turret center with the target
  local targetAngle …
Run Code Online (Sandbox Code Playgroud)

lua physics box2d

9
推荐指数
1
解决办法
3209
查看次数

台球台AI

我用Java实现了一个游泳池台球游戏,一切正常.这是一个多人游戏,但是,它也应该可以单独玩.为此,我试图实现一个简单的KI.此刻,KI只是随意选择一个方向和一个随机强度的脉冲(不知道正确的英语单词).当然,这个AI非常差,不太可能挑战玩家.

所以我想改善KI,但有几个难以解决的问题.首先,我想到只选择最近的球并尝试将其直接放入最近的洞中.这并不是那么糟糕,但如果在其他球之间有其他球,它就不再有效了.另外,这不能解决计算脉冲强度的问题.

那么有什么一般建议吗?还是有什么想法?最佳做法?

algorithm math physics billiards

9
推荐指数
2
解决办法
4162
查看次数

用于转换Ruby中物理单位(千克,磅)的库?

我知道Rails有一些很好的日期和时间管理助手.是否有一个已经完成的项目由标准单元及其转换组成或包含干净的DSL?任何带有助手的项目都可以在两个系统的基本长度和重量单位之间进行转换.谢谢!

ruby dsl physics units-of-measurement

9
推荐指数
2
解决办法
3210
查看次数

是否有任何众所周知的算法来计算基于加速度计的步骤?

我正在实施一个基于加速度计的计步器,我想知道是否有任何已知的算法来处理它.

mobile physics accelerometer gyroscope

9
推荐指数
1
解决办法
1万
查看次数

Python物理库?

是否有适用于Linux的Python最新物理库?我刚刚使用PyGame进入Python,但PyGame缺少物理库并不酷.我花了大约两个小时试图找到一个好的物理库,但这就像试图抓油; 我似乎无法做到这一点.

我根本不需要物理引擎; 我想要做的就是将物体编程为"跳跃"然后再回到地面.似乎有一些简单的碰撞(PyGame可以处理,我认为),但实际的跳跃计算让我感到困惑.如果事实证明没有任何好的可用物理库,问题似乎很简单,我可能只是试图找到一个基本的加速度方程和一个引力方程,并尝试应用那些......我想避免然而,要做到这一点.

谢谢你的帮助.

python pygame physics

9
推荐指数
2
解决办法
1万
查看次数

Qt物理场景多线程

我有一个QGraphicsScene,大约有1000个QGraphicsItems,实际上是物理项目.他们前进的每一帧,检查碰撞,并解决这些碰撞等.我真的很喜欢物理多线程.

据我所知,QGraphics类不是线程安全的.意思是,它们只能从主线程中调用.这是否强制我使用信号/槽机制将每个帧的最终项属性(x,y,旋转)发送到主线程,然后使用主线程方法实际更新QGraphicsItems?或者有更简单的方法吗?

以下只是一个假设:我可以使用QtConcurrent在我的QGraphicsItems列表上运行一个方法吗?如果我在QGraphicsItem绘制方法中使用QMutex,在物理方法中使用QMutex(这将改变我的QGraphicsItem的属性),这是否会保证在任何一个时刻只有一个线程正在读/写每个QGraphicsItem?

c++ user-interface qt multithreading physics

9
推荐指数
1
解决办法
1097
查看次数

开始物理模拟

我刚刚完成了CS282的独立学习课程 - 计算机物理仿真.这是我第一次参加我所在的大学.教科书是"游戏物理引擎开发:如何为你的游戏构建一个强大的商业级物理引擎",作者是Ian Millington.这本书充满了语法错误,虽然是一个有用的参考,但很难编码.本书提供的源代码比书中说明的要完整得多,并且解密代码存在一定难度,特别是出于图形目的,因为甚至没有关于如何使用引擎自行执行某些操作的入门知识,实际上在某些地方被破坏或未实现,或者如何使用GLUT,这是本书使用的图形实用程序,并且不是任何时候开发的!事实上,本书中的大多数参考文献都不是来自过去的十年,我认为这对15年前的教学代码来说并不算太糟糕.虽然本文是初学者环境中物理模拟大图的一个很好的资源,但它并没有为CS学生介绍一个友好的沙盒.

这基本上是一个实验,以找出哪些有效,哪些无效.我的教授还包括一本教科书,用于将ActionScript与物理引擎结合使用,但该文本需要事先了解物理引擎的工作原理,因此我们将其放弃以实现实用性.

我的问题是:

我正在撰写一篇反思论文,我希望能够推荐一些替代这些文本,为CS学生提供一个简单的方法来跳入和编写代码,实际上能够看到他们的成果.工作,可能与python.任何人都可以推荐一个对此有用的好资源和/或文本吗?对于那些参加过这门课程或类似课程的学生,您的经历是什么?

c++ python computer-science physics physics-engine

9
推荐指数
1
解决办法
3690
查看次数

应用角度冲动

嗨,大家好,我的代码是玩家和互相交互的球.我想做的是对球施加力,就像我的球员正在射击它一样.我希望球能够用力从球员身上移开.我怎样才能对此施加Impulse或force.我尝试了很多次,但我是Sprite Kit的新手.

- (void) Player {
    _Player = [SKSpriteNode spriteNodeWithImageNamed:@"player1"];
    _Player.xScale = 0.09;
    _Player.yScale = 0.09;
    _Player.position = CGPointMake(self.size.width/4, self.size.height/2);
    _Player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_Player.size];
    _Player.physicsBody.dynamic = NO;
    [self addChild:_Player];
}

- (void) TheMethodForBall {
    SKSpriteNode *sprites = [SKSpriteNode spriteNodeWithImageNamed:@"ball"];
    sprites.xScale = 0.19;
    sprites.yScale = 0.19;
    sprites.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprites.size];
    sprites.physicsBody.dynamic = YES;
    sprites.physicsBody.affectedByGravity = NO;
    sprites.physicsBody.allowsRotation = YES;
    sprites.physicsBody.restitution = YES;
    sprites.physicsBody.angularVelocity = 4;
    sprites.physicsBody.usesPreciseCollisionDetection = YES;
    [self addChild:sprites];
}
Run Code Online (Sandbox Code Playgroud)

physics sprite-kit

9
推荐指数
1
解决办法
1516
查看次数

CUDA粒子中最近的邻居

编辑2: 请看一下TLDR这个交叉路口.

编辑:鉴于粒子被分割成网格单元(比如16^3网格),让每个网格单元运行一个工作组和一个工作组中的多个工作项是一个更好的想法,因为可以有最大数量的每格网格的粒子?

在这种情况下,我可以将相邻单元格中的所有粒子加载到本地内存中,并通过它们迭代计算一些属性.然后我可以将特定值写入当前网格单元格中的每个粒子.

这种方法是否有利于为所有粒子运行内核以及每次迭代(大多数时间是相同的)邻居?

另外,理想的比例是number of particles/number of grid cells多少?


我正在尝试为OpenCL 重新实现(和修改)CUDA Particles,并使用它来查询每个粒子的最近邻居.我创建了以下结构:

  • 缓冲区P保持所有粒子的3D位置(float3)
  • 缓冲Sp存储int2粒子id对及其空间哈希值.Sp根据哈希值排序.(哈希只是从3D到1D的简单线性映射 - 还没有Z-indexing.)

  • 缓冲区L存储缓冲区int2中特定空间哈希值的起始和结束位置对Sp.示例:L[12] = (int2)(0, 50).

    • L[12].x是具有空间散列Sp第一个粒子的索引(in )12.
    • L[12].y是具有空间散列Sp最后一个粒子的索引(in )12.

现在我拥有了所有这些缓冲区,我想迭代遍历所有粒子P并为每个粒子迭代它们最近的邻居.目前我有一个看起来像这样的内核(伪代码):

__kernel process_particles(float3* P, int2* Sp, int2* L, int* …
Run Code Online (Sandbox Code Playgroud)

algorithm simulation physics nearest-neighbor opencl

9
推荐指数
1
解决办法
1066
查看次数