我知道这个问题肯定已经好几次解决了,如果你知道它们的存在,请赐教.谢谢.
快速简介:我想从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
在平面(二维)中,路径可以由(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一无所知,特别是如何为这个问题编写代码.
我正在寻找一种近似在高度图上移动的流体体积的方法.我能想到的最简单的解决方案是将其近似为大量直径小(<0.1m)的非绘制球体.然后,我会在它们停下来的位置放置一个可见的平面,代表水面"水面".据我所知,没有托管物理引擎包含内置流体模拟器,因此问题.
实现将包括使用物理引擎,如JigLibX,它能够模拟球体的运动.为了确定平面的高度,我想到平均分组顶层每个球体的最大高度.
我不希望性能很好,但实时可以接近吗?如果没有,我可以使用此模拟预先烘烤流线吗?
我希望这是有道理的,我真的希望得到关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题.
感谢任何帮助,Venatu
(如果它的相关,我的目标平台是XNA 4.0,使用C#.Windows只在这个时间点,所以PhysX/Havok是模拟的可能性,但我更喜欢托管解决方案)
我有一个封闭的凸多面体,它是由一个凸多边形(面)阵列定义的,这些多边形由三维空间中的顶点数组定义.假设密度均匀,我试图找到多面体的质心.目前我用这个伪代码中的算法计算它.
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) 我看过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) 我想为一个元素设置动画,就好像你在俯视地球一样.元素向你跳跃,击中它的顶点,然后向下跌落一点.轨迹的侧视图如下:
_
/ \
/ |
|
|
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]之外的点.
我是通过使用维基百科上的基本方程碰撞成对的2D凸对象(无旋转)来计算结果的.但是,当存在依赖关系时,例如两个对象同时命中另一个对象:

例如,在这里,对象1和2在完全相同的时间击中3,成对方法失败.根据我计算碰撞的顺序(先是1-3或先2-3),我会得到不同的结果.通过碰撞的重复迭代仍将给出依赖于顺序的结果.
我已经设置了它,所以我可以弄清楚哪些对象彼此接触,所以我的代码会知道在计算其中一对时,对象3在那一刻与另一个对象发生碰撞(所以1-3碰撞会知道关于2-3碰撞,反之亦然).我也知道边缘/角落与什么接触.
无论什么解决方案都需要健壮...例如,如果设置变得更复杂,就像这两个例子:

这个过程需要能够处理这个问题,甚至更糟.任何可能的同时接触/碰撞链.我将手头上的所有数据描述它们,所以我"只"需要知道如何解决这些系统的一般情况.我目前没有对旋转做任何事情,这简化了事情.
看起来它可能涉及将对象分组在一起,但是由非正交的边缘引起的干扰(参见最后一个带有六边形的示例)似乎会使该方法失败.
我之前看过一个类似的问题,但答案从未被检查过(死胡同?).我不确定冲击传播会如何解决我的第一个例子,因为C在第一次碰撞后就会移开......所以有什么震撼可以传播?编辑:好的,我现在看到同时碰撞和震动传播是两个不同的想法,这就是为什么它看起来没用.
language-agnostic algorithm physics game-physics physics-engine
是否可以在一个SKNode中添加两个(更多)SKPhysicsBodys?与此类似的东西: 来自PhysicsEditor的示例 因为角色的头部应该与球碰撞,所以顶部应该是圆形的.此外球不能通过球员.你知道如何做到这一点吗?
我正在使用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) 今天早上我想写一个无用的程序,我最终得到了这个极其简单的天文模拟器.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)