标签: physics

加速度计校准

我正在使用加速度计在屏幕上以X/Y移动某些东西.

如果手机在桌子上平放,这很容易.

我想出了一些东西,试图能够从任何给定的位置开始,并从那里开始工作.但它似乎并不自然地起作用.

我如何校准事物,以便从起点上获得方向上的差异?

cursorX -= accelerometerCalibrationY - getAccelerometerY();
cursorY += accelerometerCalibrationX - getAccelerometerX();
Run Code Online (Sandbox Code Playgroud)

这适用于桌子上的平板和一些起始位置.这些变量在开始时只是getAccelerometerXY.

android physics

12
推荐指数
1
解决办法
3038
查看次数

如何将重力应用于弹跳球应用?

我写了一个相当简单的java应用程序,它允许你拖动你的鼠标,并根据你所做的鼠标拖动的长度,它将向那个方向射击一个球,随着它的移动而从墙壁上弹回.

这是一个快速截图:
替代文字http://img222.imageshack.us/img222/3179/ballbouncemf9.png

屏幕上的每个圆圈都是Ball对象.球运动被分解为x和y向量;

public class Ball {
    public int xPos;
    public int yPos;
    public int xVector;
    public int yVector;

    public Ball(int xPos, int yPos, int xVector, int yVector) {
        this.xPos = xPos;
        this.yPos = yPos;
        this.xVector = xVector;
        this.yVector = yVector;
    }

    public void step()
    {
        posX += xVector;
        posY += yVector;

        checkCollisions();
    }

    public void checkCollisions()
    {
        // Check if we have collided with a wall
        // If we have, take the negative of the appropriate vector
        // …
Run Code Online (Sandbox Code Playgroud)

language-agnostic physics gravity

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

轨道力学

有没有人有一个实施轨道力学的例子(最好是在XNA中)?我目前使用的代码如下,但它执行时并没有"感觉正确".物体只是稍微向地球弯曲,无论我调整多少变量,我都无法进入轨道,甚至是部分轨道.

shot.Position += shot.Velocity;  

foreach (Sprite planet in planets)  
{  
  Vector2 directionToPlanet = (planet.Position - shot.Position);  
  directionToPlanet.Normalize();  

  float distance = Vector2.DistanceSquared(shot.Position, planet.Position);  

  float gPull = (float)(planet.gravityStrength * (planet.Mass * shot.Mass) / distance) + planet.gravityField;  
  shot.Position += new Vector2(directionToPlanet.X * gPull, directionToPlanet.Y * gPull);  
} 
Run Code Online (Sandbox Code Playgroud)

编辑 标记Mendelt的答案是正确的,指出我需要更新速度,而不是位置.我还需要将gPull的计算更改为

float gPull = shot.Mass * planet.Mass / distanceSqr * planet.gStr;
Run Code Online (Sandbox Code Playgroud)

c# xna physics

11
推荐指数
3
解决办法
5069
查看次数

用于C++ 2D GameEngine的Chipmunk Physics或Box2D?

我正在开发它正在变成一个"跨平台"的2D游戏引擎,我的初始平台目标是iPhone OS,但可以转移到Android甚至某些控制台,如PSP或任天堂DS,我想保留我的选择打开.

我的引擎是用C++开发的,并且已经阅读了很多关于Box2D和Chipmunk的内容,但我还是无法决定使用哪一个作为我的物理中间件.

Chipmunk似乎很容易嵌入,Box2D似乎被广泛使用.Chipmunk是C,而Box2D是C++,但我听说Box2D的API比chipmunk的API差得多.

现在我将使用引擎形状创建和碰撞检测功能来处理不规则多​​边形(非凹形).

我重视:

1) Good API's
2) Easy to integrate.
3) Portability.
Run Code Online (Sandbox Code Playgroud)

当然,如果你发现其他任何事情,我很乐意听到.

您认为哪一种更适合我的需求?

编辑:我最后写了一篇关于我的特定选择的文章,你可以在这里找到它

c++ iphone physics game-engine

11
推荐指数
2
解决办法
3444
查看次数

检测汽车加速度(iPhone加速度计)

我正在开发一款iPhone应用程序,我们正在尝试计算移动汽车的加速度.类似的应用程序已经实现了这一点(Dynolicious),但不同之处在于此应用程序旨在用于一般城市驾驶,而不是拖动条.

这引起了我们一个大关注,Dynolicious幸运地能够避免:丘陵.是的,丘陵.

这有两个重要阶段:校准和实际驾驶.

我们的初步运作很简单并且遭受了后果.在校准阶段,我在手机上取平均力,在跑步过程中,我只是从当前力中减去平均力,以获得此帧的当前加速度.问题在于,典型的汽车比前进力量获得更多的力量 - 从转向坑洼的一切都导致价值与实际发生的事情不同步.

下一步是为了增加iPhone必须以屏幕朝向汽车后部的方式定向的条件.使用这种方法,我试图只跟随z轴上的力,但这显然会导致问题,除非iPhone由于重力直接定向.

之后的一些三角函数,我已经成功地将重力运转到了等式之外,因此iPhone实际上正在非常非常好地读取汽车.

直到我遇到一个斜坡.一旦汽车的角度发生变化,我突然接到了没有意义的加速和减速,我们又一次失去了同步.

在数学上和我比很聪明的人交谈导致我试图实施的解决方案比我想承认的更长.它的步骤如下:

1)在校准过程中,将重力测量为矢量而不是尺寸.存储该矢量.2)当汽车最初向前移动时,采取运动矢量并减去重力.将此作为前进动力.(暂时忽略那些困难的用户案例,让我们专注于数学运算:) 3)从前向矢量和重力矢量构建一个平面.4)每当收到一个力时,将其投射到所述平面上以消除侧向力/等.5)然后,使用该力,已知的重力大小和已知的向前运动方向来基本上求解三角形以获得前向矢量.

在这个新系统中造成最大困难的问题不是第5步,我已经达到了所有数字看起来应该如此的程度.困难的部分实际上是前向矢量的检测.我正在选择幅度超过重力的矢量,并从那里平均它们并减去重力.(我正在做一些错误检查以确保我没有使用强制因为iPhone加速度计稍微关闭,这种情况比我想要的更频繁).但是,如果我绘制我正在使用的这些矢量,它们实际上会以大约20-30度的角度变化,这可能会导致一些强烈的不准确性.最终结果是应用程序现在比以前更加不准确.

所以基本上 - 你所有的数学和iPhone都在那里 - 任何明显的错误?还有更好的解决方案吗 任何可能有用的经验?

奖励:为第一个答案提供250美元的奖金,从而获得解决方案.

iphone physics objective-c accelerometer

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

在3D中翻页的动画算法?

我想做一个逼真的页面翻转动画.它不一定是真正的物理模型,只要它看起来令人信服.许多商店都有他们现实世界小册子的动画,但我觉得它们并不令人信服.页面不弯曲逼真,灯光不正确等.

我会对描述此问题的任何链接或实现它的代码感到满意.我将实现这个.net(使用SlimDX或WPF).

3d animation physics

11
推荐指数
2
解决办法
6725
查看次数

帮助辛积分器

我正在尝试开发物理模拟,我想实现一个四阶辛积分方法.问题是我必须弄错数学,因为在使用辛积分器时我的模拟根本不起作用(与模拟工作相当好的四阶Runge-Kutta积分器相比).我一直在谷歌搜索这个,我能找到的只是关于这个主题的科学文章.我试图改编文章中使用的方法,但我没有运气.我想知道是否有人有使用辛积分器的模拟的源代码,最好是模拟引力场,但任何辛积分器都可以.源代码的语言并不重要,但我会欣赏使用C风格语法的语言.谢谢!

math physics scientific-computing numerical-integration differential-equations

11
推荐指数
1
解决办法
3896
查看次数

iPhone加速度计到底测量的是什么?

UIAcceleration类苹果文档说,

"当设备背面静止放置在水平表面上时,每个加速事件都有大约以下值:
x:0
y:0
z:-1
"

现在,我很困惑!当你清楚地说"设备正在静止"时,加速度如何不为零?

UPDATE

从响应来看,我认为这应该被称为"力计"或"重力计",而不是加速度计!

iphone physics accelerometer ios

11
推荐指数
4
解决办法
6925
查看次数

为什么PhysicsJS中的重力加速度为0.0004?

或者,或许,更好,它是什么意思?

单位应该是什么?

如果我试图模拟与"背景"的摩擦,像这样:

return this
    .velocityDirection
    .mult(mu * this.mass * g)
    .negate();
Run Code Online (Sandbox Code Playgroud)

我希望用g为9.80665 m/s ^ 2.它在PhysicsJS之前以这种方式工作:

var
    frictionForce;
    frictionForce = vec2.create();
    vec2.scale(
        frictionForce,
        vec2.negate(
            frictionForce,
            this.velocityDirection
        ),
        mu * this.mass * g
    );
return frictionForce;
Run Code Online (Sandbox Code Playgroud)

使用glMatrix作为我的线性代数.

我正在考虑以千克为单位的质量和以牛顿(等)为单位的力量,但是在PhysicsJS中它看起来并不像那样.(例如:如果我有一个半径为1的圆体,那么它是什么?因为当我必须将此值用于其他东西时,以及当它"转换"为屏幕上的像素时,它会有所不同

既然我正在使用物理库,我觉得我错过了一些物理学...

我希望有人能指出我正确的方向来更好地理解它.我现在正在浏览API Docs并学习很多但不是我找到了我想要的答案.

UPDATE

我收到了一个非常简单的答案.这只是为了让任何有兴趣知道我做了什么的人......

感谢Jasper和dandelany,我开始了解一些PhysicsJS的工作原理要好得多.为了实现我在PhysicsJS中使用牛顿输入,米/秒平方(等)的"梦想"(并且还具有每米比率的可配置像素),我决定创建另一个积分器.

它只是原始(和默认)verlet集成器的略微变化.我或多或少地解释了这篇(粗略的)物文中的Meters,Seconds和Newtons

javascript physics physicsjs

11
推荐指数
2
解决办法
670
查看次数

Unity 2d跳跃脚本

有没有人在团结的2D游戏中有一个好的跳跃剧本?我的代码有效,但仍然远没有跳跃,看起来它正在飞行.

using UnityEngine;
using System.Collections;

public class movingplayer : MonoBehaviour {

public Vector2 speed = new Vector2(10,10);

private Vector2 movement = new Vector2(1,1);

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    float inputX = Input.GetAxis ("Horizontal");
    float inputY = Input.GetAxis ("Vertical");

    movement = new Vector2(
        speed.x * inputX,
        speed.y * inputY);

    if (Input.GetKeyDown ("space")){
                         transform.Translate(Vector3.up * 260 * Time.deltaTime, Space.World);
                 } 

}
void FixedUpdate()
{
    // 5 …
Run Code Online (Sandbox Code Playgroud)

c# physics unity-game-engine

11
推荐指数
2
解决办法
8万
查看次数