标签: physics

加速度计重力部件

我知道这个问题肯定已经好几次解决了,如果你知道它们的存在,请赐教.谢谢.

快速简介:我想从3轴加速度计计算这3个轴中每一个的重力分量.我使用了2轴自由体图来计算出世界XZ,YZ和XY轴上的加速度计的重力分量.但是解决方案似乎略有偏差,对于极端情况只有1个加速度计轴暴露于重力时是可以接受的,但对于45度的俯仰和滚动,总的幅度大于重力(由Xa ^ 2 + Ya ^获得) 2 + Za ^ 2 = g ^ 2; Xa,Ya和Za是其X,Y和Z轴上的加速度计读数.

更多细节:该设备是Nexus One,除了3轴加速度计外,还有一个用于方位角,俯仰和滚转的磁场传感器.

在世界的轴上(Z与重力方向相同,X或Y指向北极,不要认为这很重要吗?),我认为我的设备在YZ轴上有一个间距(P),和XZ轴上的辊(R).由此我使用简单的触发得到:Sin(R)= Ax/Gxz Cos(R)= Az/Gxz Tan(R)= Ax/Az

还有另一组音高,P.

现在我将重力定义为在世界轴上有3个分量,Gxz只能在XZ轴上测量,Gyz用于YZ,Gxy用于XY轴.Gxz ^ 2 + Gyz ^ 2 + Gxy ^ 2 = 2*G ^ 2 2G是因为重力在该定义中有效地包括两次.

哦,XY轴产生更具异国情调的东西......如果需要,我会解释.

从这些方程式我得到了Az的公式,并删除了tan操作,因为我不知道如何处理tan90计算(它是无穷大?).

所以我的问题是,任何人都知道我是否正确/错误或能够指出我正确的方向?

谢谢!DVD

algorithm android physics accelerometer

7
推荐指数
2
解决办法
8052
查看次数

如何在Mathematica中随机漫步?

在平面(二维)中,路径可以由(n + 1)个点(Xo,Yo),(X1,Y1),...,(Xn,Yn)的序列表示,对于任何i (整数1 <i <n-1):

Pi(vector) = [Xi-X(i-1),Yi-Y(i-1)]
Run Code Online (Sandbox Code Playgroud)

表示第i步的是具有长度Pi的向量,并且通过转向角a(i)以代数方式(不知道如何)测量向量Pi和P(i + 1)之间的方向变化的值. .

像任何角度分布(方向变化)一样,它的特征在于平均向量,该平均向量被认为是对称的并且具有角平均值Φ= o.这种分析的方法涉及数值模拟,因为代数方法似乎太复杂,我必须使用伪随机高斯发生器从正态分布获得连续值,平均值为0,标准偏差σ(0.1- 1.2)弧度来模拟路径.

因此,在每个具有长度P(恒定,即125km)的步骤之后,方向变化的值(转向角a(i))由伪随机发生器确定给定的σ值,其沿着该值是恒定的.路径.然后向下一个方向迈出一步,依此类推.

一些有用的方程:

a(i) ~ n(0,?)
?(i+1) = ?(i) + a(i)
X(i+1) = Xi + P Cos[?(i+1)]
Y(i+1) = Yi + P Sin[?(i+1)]
Run Code Online (Sandbox Code Playgroud)

其中Θi代表第i步的方向.根据伪随机均匀发生器的均匀角度分布随机选择第一步骤Θi的方向.转动角度从-Pi到Pi记录

所以我的问题是:

我怎样才能看到12个500步的路径,每个路径的特征是标准变化σ的给定值在0.1到1.2弧度范围内,连续步骤之间的方向变化分布和在Mathematica中绘制它?我对Mathematica一无所知,特别是如何为这个问题编写代码.

plot physics wolfram-mathematica

7
推荐指数
3
解决办法
3053
查看次数

模拟高度图上的流体流动

我正在寻找一种近似在高度图上移动的流体体积的方法.我能想到的最简单的解决方案是将其近似为大量直径小(<0.1m)的非绘制球体.然后,我会在它们停下来的位置放置一个可见的平面,代表水面"水面".据我所知,没有托管物理引擎包含内置流体模拟器,因此问题.

实现将包括使用物理引擎,如JigLibX,它能够模拟球体的运动.为了确定平面的高度,我想到平均分组顶层每个球体的最大高度.

我不希望性能很好,但实时可以接近吗?如果没有,我可以使用此模拟预先烘烤流线吗?

我希望这是有道理的,我真的希望得到关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题.

感谢任何帮助,Venatu

(如果它的相关,我的目标平台是XNA 4.0,使用C#.Windows只在这个时间点,所以PhysX/Havok是模拟的可能性,但我更喜欢托管解决方案)

c# physics fluid heightmap

7
推荐指数
1
解决办法
2235
查看次数

凸多面体的质心

我有一个封闭的凸多面体,它是由一个凸多边形(面)阵列定义的,这些多边形由三维空间中的顶点数组定义.假设密度均匀,我试图找到多面体的质心.目前我用这个伪代码中的算法计算它.

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;
}
Run Code Online (Sandbox Code Playgroud)

这基本上取面的质心的加权平均值.我不是100%确定这是正确的,因为我无法在线找到正确的算法.如果有人可以确认我的算法或引用我一个正确的算法我会很感激.

谢谢.


[编辑]

所以这是我用来查找质心的实际Java代码.它将多面体分解为会聚在多面体内任意点上的金字塔.金字塔质心的加权平均值基于以下公式.

C all = SUM 所有金字塔(C 金字塔*体积金字塔)/体积全部

这里是(大量注释的代码):

    // Compute the average of the facial centroids.
    // This gives an arbitrary point inside the polyhedron.
    Vector3 avgPoint = new Vector3(0, 0, 0);
    for (int i = 0; i < faces.size(); i++) {
        avgPoint.add(faces.get(i).centroid); …
Run Code Online (Sandbox Code Playgroud)

java math geometry physics physics-engine

7
推荐指数
1
解决办法
2728
查看次数

python球物理模拟

我看过Peter Colling Ridge在
http://www.petercollingridge.co.uk/pygame-physics-simulation/上的精彩教程
,我正在扩展PyParticles脚本
代码可以在网站上找到(免费),我是使用PyParticles4.py

本教程中使用的类

粒子类
圆形2d具有半径,质量,速度,位置
的对象弹簧类
A弹簧绑定2个对象(粒子)并使用胡克定律 (F = -kx)来确定它们之间的相互作用
环境类
环境所在的环境粒子相互作用

我想知道我是否可以使用2个粒子并制作一个"Rod"类(如教程中的Spring类),它具有特定的长度并且不允许粒子比那个(指定的)长度更接近.
另外,
向每个粒子施加一个力(当需要时),这样如果一个被拉向左边,另一个被拉向另一个,但是实际上......
就像使用钢材连接两个不同类型的球(从中心)一样棒,但在2-d ..
而且我不想使用第三方模块

提前致谢..

EDIT/UPDATE:
尝试应用约束定理(失败)
这是代码:

class Rod:
    def __init__(self, p1, p2, length=50):
        self.p1 = p1
        self.p2 = p2
        self.length = length

    def update(self):
        'Updates The Rod and Particles'
        # Temp store of co-ords of Particles involved
        x1 = self.p1.x
        x2 = self.p2.x
        ###### Same for Y #######
        y1 = self.p1.y
        y2 = self.p2.y

        # Calculation of …
Run Code Online (Sandbox Code Playgroud)

python pygame physics

7
推荐指数
1
解决办法
2437
查看次数

如何在CSS动画中获得重力效果?

我想为一个元素设置动画,就好像你在俯视地球一样.元素向你跳跃,击中它的顶点,然后向下跌落一点.轨迹的侧视图如下:

     _
   /   \
  /     |
 |
 |
Run Code Online (Sandbox Code Playgroud)

我无法通过关键帧动画获得逼真的效果.我看起来像这样人造:

    /\
   /  \
  /
 /
/
Run Code Online (Sandbox Code Playgroud)

CSS

@keyframes springIn {
    0% {
        transform: scale(0.0);
    }
    80% {
        transform: scale(1.2);
    }
    100% {
        transform: scale(1.0);
    }
}

.someElement {
    animation: springIn 1s linear 1s 1 forwards;
}
Run Code Online (Sandbox Code Playgroud)

如何在动画上放置抛物线函数以获得重力效果?我以为我可以使用Bezier曲线,但CSS标准不允许[0,0]之外的点.

css physics

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

如何处理多个同时发生的弹性碰撞?

我是通过使用维基百科上的基本方程碰撞成对的2D凸对象(无旋转)来计算结果的.但是,当存在依赖关系时,例如两个对象同时命中另一个对象:

在此输入图像描述

例如,在这里,对象1和2在完全相同的时间击中3,成对方法失败.根据我计算碰撞的顺序(先是1-3或先2-3),我会得到不同的结果.通过碰撞的重复迭代仍将给出依赖于顺序的结果.

我已经设置了它,所以我可以弄清楚哪些对象彼此接触,所以我的代码会知道在计算其中一对时,对象3在那一刻与另一个对象发生碰撞(所以1-3碰撞会知道关于2-3碰撞,反之亦然).我也知道边缘/角落与什么接触.

无论什么解决方案都需要健壮...例如,如果设置变得更复杂,就像这两个例子:

在此输入图像描述

这个过程需要能够处理这个问题,甚至更糟.任何可能的同时接触/碰撞链.我将手头上的所有数据描述它们,所以我"只"需要知道如何解决这些系统的一般情况.我目前没有对旋转做任何事情,这简化了事情.

看起来它可能涉及将对象分组在一起,但是由非正交的边缘引起的干扰(参见最后一个带有六边形的示例)似乎会使该方法失败.

我之前看过一个类似的问题,但答案从未被检查过(死胡同?).我不确定冲击传播会如何解决我的第一个例子,因为C在第一次碰撞后就会移开......所以有什么震撼可以传播?编辑:好的,我现在看到同时碰撞和震动传播是两个不同的想法,这就是为什么它看起来没用.

language-agnostic algorithm physics game-physics physics-engine

7
推荐指数
1
解决办法
2545
查看次数

Sprite Kit - 将两个物理主体添加到一个SKNode

是否可以在一个SKNode中添加两个(更多)SKPhysicsBodys?与此类似的东西: 来自PhysicsEditor的示例 因为角色的头部应该与球碰撞,所以顶部应该是圆形的.此外球不能通过球员.你知道如何做到这一点吗?

physics ios7 sprite-kit

7
推荐指数
1
解决办法
2794
查看次数

JBox2D - 查找碰撞坐标

我正在使用JBox2D编写Java程序.我需要找到两个纹理之间的确切碰撞点,如果它们碰撞的话.

我有代码来确定是否发生了碰撞,并且显然可以调用碰撞对象ID来确定哪些纹理发生碰撞.

我似乎无法弄清楚如何抓住碰撞本身的实际坐标.我阅读了文档,但它非常复杂,并没有直接解决这个问题.

这是我的代码:

import org.jbox2d.callbacks.ContactImpulse;
import org.jbox2d.callbacks.ContactListener;
import org.jbox2d.collision.Manifold;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Fixture;
import org.jbox2d.dynamics.contacts.Contact;


public class MyContactListener implements ContactListener{


    //When they start to collide
    public void beginContact(Contact c) {

    System.out.println("CONTACT");

    Fixture fa = c.getFixtureA();
    Fixture fb = c.getFixtureB();

    Vec2 posA = fa.getBody().getPosition();
    Vec2 posB = fb.getBody().getPosition();



}

public void endContact(Contact c) {

}

public void preSolve(Contact c, Manifold m) {}

public void postSolve(Contact c, ContactImpulse ci){}

}
Run Code Online (Sandbox Code Playgroud)

java physics collision box2d jbox2d

7
推荐指数
1
解决办法
405
查看次数

我的行星疯了 - 一个与Java有关的问题

今天早上我想写一个无用的程序,我最终得到了这个极其简单的天文模拟器.MCVE版本的代码附在帖子的末尾.

然后我添加了一些行星,坐下来准备好欣赏一些绕着彼此绕行的行星.然而事实证明是一个问题.

问题是,两个原本相互靠得太近的静态行星往往会相互冲击到超高速,它们都会永远消失在屏幕之外.这显然违背了动力原则.行星不这样做.我开始怀疑我的牛顿法实施有什么问题.但有些时候,只要它们保持"安全"距离,行星就可以正常工作.

如果你想研究这个问题,我已经为你仔细考虑了两个设置.第一个,增加了两个行星,并且非常稳定.(您可以通过注释掉其中包含'Three'的每一行来完成此操作.)您可以通过输入默认代码来测试第二行.这是行星疯狂的地方.

这个问题似乎是一个谜,起源于我从未探索过的一些计算机科学领域(尽管我是一个菜鸟).为了我的头发,如果有人能解释,我会非常感激.

代码开头:

PVector planetOneLocation = new PVector(300, 200);
PVector planetOneSpeed = new PVector(0, -.1);
float planetOneMass = 1;

PVector planetTwoLocation = new PVector(100, 200);
PVector planetTwoSpeed = new PVector(0, .1);
float planetTwoMass = 1;

PVector planetThreeLocation = new PVector(200, 200);
PVector planetThreeSpeed = new PVector(0, 0);
float planetThreeMass = 10;

float g = 5;

void setup() {
  size(500, 500);
}

void draw() {

  updatePlanetOne();
  updatePlanetTwo();
  updatePlanetThree();

  planetOneLocation.add(planetOneSpeed);
  planetTwoLocation.add(planetTwoSpeed);
  planetThreeLocation.add(planetThreeSpeed);

  background(0);

  ellipse(planetOneLocation.x, planetOneLocation.y, 10*planetOneMass, 10*planetOneMass); …
Run Code Online (Sandbox Code Playgroud)

processing physics

7
推荐指数
1
解决办法
214
查看次数