标签: physics

物理数据类型

我目前正在设计一个涉及一些物理学的程序(没什么太奇特,几个球相互碰撞)

在c#中,我可以使用哪种最精确的数据类型来表示位置(没有离散跳跃的感觉)?

另外,在t和t + 1之间我可以得到的最小时间是多少?一蜱?

编辑:澄清:C#中最小的时间单位是多少?[TimeSpan].Tick

c# types physics

10
推荐指数
3
解决办法
705
查看次数

Python的波浪模拟

我想在三维空间中模拟一些具有吸收和反射的传播波.我想用python做.我应该使用numpy吗?我应该使用一些特殊的库吗?

我该如何模拟波浪?我可以使用波动方程吗?但是,如果我有反思怎么办?有更好的方法吗?我应该用矢量吗?但是当光线发散时,强度会降低.难.

提前致谢.

python simulation physics numpy wave

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

Cocos2D Bezier围绕物体弯曲,好像是在重力作用下

我正试图操纵一个物体.当它接近另一个物体时,让我们说一个地球仪,我希望地球对原始物体有一个引力.我知道我应该使用CCBezierTo,所以这不是一个编程问题,因为它是一个数学问题.

在数学上,我怎么能找出贝塞尔曲线的三个点(1,2和结束)并根据它的距离赋予它一个权重(更远的距离=更少的拉力).我已经在变量中绘制了距离.

想象一下在月球周围弹射的宇宙飞船.

码:

ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(projectile.position.x + 10, projectile.position.y + 20);
bezier.controlPoint_2 = ccp(projectile.position.x + 20, projectile.position.y + 40);
bezier.endPosition = ccp(projectile.position.x + 30, projectile.position.y+60);
id bezierAction = [CCBezierTo actionWithDuration:1 bezier:bezier];
[projectile stopAllActions];
[projectile runAction: bezierAction];
Run Code Online (Sandbox Code Playgroud)

bezier physics objective-c gravity cocos2d-iphone

10
推荐指数
1
解决办法
2358
查看次数

是否有一个JavaScript物理库可以使用div等HTML元素而不是画布?

玩家堆栈

我正在为游戏制作一个简单的堆栈,玩家可以移动编号的棋子,以跟踪他们与完成收集胜利手段的距离.

目前我使用jQuery UI的可拖动和可拖放.它很适合轻松启动,但一次只能移动一件:http://cssdeck.com/labs/cowmmudd/4.

  • 我想将移动的部件外包给一个真正的JavaScript物理库,而不是使用jQuery UI.(因此当一个人一直移动上排的蓝色4时,它会强制该行上的所有棋子.)
  • 我想继续使用普通的HTML元素来表示我的作品,因为它们更容易风格和推理.(我已经看过所有的Javascript物理库,canvas但是我想要像谷歌那样实现相同的目标:http://mrdoob.com/projects/chromeexperiments/google-gravity/)

有人可以使用他们所知道的最好的JavaScript物理库提供控制普通,非画布HTML元素的放置和碰撞的简约示例吗?

javascript html5 physics game-physics

10
推荐指数
1
解决办法
1961
查看次数

SpriteKit:如何创建基本物理关节

我想在两个SKPhysicsBodies之间创建简单的关节.但是,他们表现得非常奇怪.我很清楚锚点应该在场景坐标上.请查看附带的源代码.

例如,这是在矩形上附加小方块后如何生成固定关节.

-(void)createFixedJointOnScene:(SKScene*)scene
Run Code Online (Sandbox Code Playgroud)

{

//Adding Rectangle

    SKSpriteNode* backBone = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 200)];
backBone.position = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
backBone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:backBone.size];
backBone.physicsBody.categoryBitMask = GFPhysicsCategoryRectangle;
backBone.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:backBone];

//Adding Square
SKSpriteNode* head = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(40, 40)];
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];
head.position = CGPointMake(backBone.position.x, backBone.position.y-40);
head.physicsBody.categoryBitMask = GFPhysicsCategorySquare;
head.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:head];

//Pinning Rectangle and Square
NSLog(@"Head position %@", NSStringFromCGPoint(head.position));
SKPhysicsJointFixed* pin =[SKPhysicsJointFixed jointWithBodyA:backBone.physicsBody bodyB:head.physicsBody anchor:head.position];
[self.physicsWorld addJoint:pin];
Run Code Online (Sandbox Code Playgroud)

}

在此输入图像描述

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest.zip

谢谢.

physics objective-c ios7 sprite-kit skphysicsbody

10
推荐指数
1
解决办法
5373
查看次数

解决台球射击冲动轨迹

我正在使用子弹制作游泳池模拟器,需要准确模拟人类可能的镜头.为了找到应用于母球的冲动,我使用了物体球,口袋中心和母球的位置.

常见拍摄场景http://www.poolplayers.com/wp-content/uploads/2013/03/372-TangentLine-2.jpg

在母球的运动路径类似于物体球(180度附近的击打角度)的情况下,一切正常并且物体球落入口袋中.但似乎镜头路径的角度越大,我产生的脉冲的误差范围就越大.我已经尝试了很多东西来解决这个问题:调整球的碰撞余量,扩大世界范围,关闭摩擦力和恢复原状以及许多其他因素似乎没有改变这种行为.

以下是我的代码的相关部分:

//assume p = pocket center, b = object ball center, c = cue ball center

//first find the position of the ghost ball, ie the target point of collision for the cue ball
btVector3 ghostPos = b+(b-p).normalize()*(2.0f*BALL_RADIUS);

//then use the normal between the ghostball and cue ball as the impulse, scaled by the shots total distance
btVector3 cueImpulse = (ghostPos-c).normalize()*((p.distance(b)+ghostPos.distance(c))*HIT_RATIO);

//finally apply the impulse to the cueball's center of mass (using general form of applyImpulse to …
Run Code Online (Sandbox Code Playgroud)

c++ math physics billiards bulletphysics

10
推荐指数
1
解决办法
2334
查看次数

如何将流体模拟集成到Rigid Body phisix引擎中?

1)有没有证据表明混合刚体phisix和流体(比如SPH)的模拟可以为现实世界提供建模?
2)这种混合的框架如何工作?

假设我们在一个箱子里面有一个woden秋千,里面有两种不同的液体(油和水)和一个柔软的身体球.开始条件如下: 在此输入图像描述

我们怎么能模拟这种情况呢?用什么工具?

我现在如何看待它(如果我错了请高高在上)

  1. 我们所有的身体和液体在州(*)
  2. 诸如Bullet之类的现代发动机支持软体和刚体 - 因此我们可以*在RB\SB phisix引擎中加载()并制作框架.
  3. 获取所有顶点并比较前一帧的位置.走出某种形式的矢量力场.
  4. *在流体发动机的tate()中表示我们的rb/sb,作为来自力场的脉冲的粒子
  5. load(*)使用RB和SB作为粒子,其密度对应于它们制作的材料,并且脉冲对应于先前计算的矢量场
  6. 在流体引擎中制作一个框架
  7. 更新关于粒子运动的rb/sb位置 - 获取新状态(**)

这至少在理论上可以近乎实时地用gpu上的当前流体3 +子弹3来计算......对于简单的情况......但是我想知道这使得系统不真实多少?

algorithm modeling physics bulletphysics fluid-dynamics

10
推荐指数
1
解决办法
848
查看次数

物理游戏编程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
查看次数

确定使用外力时球体和平面之间的静止接触

这个问题有一个主要问题,还有一个小问题.我相信我在研究中的任何一个问题都是正确的,但不是两者都有.

对于我的物理循环,我做的第一件事就是对我TotalForce的刚体物体施加一个引力.然后我用我TotalForce和我检查碰撞Velocity.我TotalForce(0, 0, 0)在每次物理循环后重置,虽然我会保留我的velocity.

我熟悉在仅使用速度时在移动球体和静态平面之间进行碰撞检查.但是,如果我还有其他力量velocity,比如重力怎么办?我把其他力量放进去TotalForces(现在我只有引力).为了弥补这一点,当我确定球体当前没有与飞机重叠时,我这样做了

    Vector3 forces = (sphereTotalForces + sphereVelocity);
    Vector3 forcesDT = forces * fElapsedTime;
    float denom = Vec3Dot(&plane->GetNormal(), &forces);
Run Code Online (Sandbox Code Playgroud)

然而,这可能是我认为假设是静止接触的问题.我认为休息接触是通过计算的

denom * dist == 0.0f
Run Code Online (Sandbox Code Playgroud)

哪里dist

float dist = Vec3Dot(&plane->GetNormal(), &spherePosition) - plane->d;
Run Code Online (Sandbox Code Playgroud)

(作为参考,denom * dist > 0.0f球体远离飞机的明显意义)

但是,这永远不会成真.即使看起来有"休息接触".这是由于我forces上面的计算总是至少有-9.8(我的重力).y.当朝向法线为(denom0,1,0 )的平面移动时,将产生-9.8的ay .

我的问题是

1)我是否正确计算了我的前两个代码片段中提到的休息联系方式?

如果是这样,

2)我的"其他力量"如引力如何使用?我使用TotalForces不正确吗?

作为参考,我的时间步长是

  mAcceleration = mTotalForces / mMass; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm physics game-physics

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