标签: physics

多功能3d人工生命引擎?

研究出现,建立一个快速测试新想法的开发框架是非常有用的.物理碰撞的3d会很好,而开源将是一个很大的优势.为了这个目的,'breve'看起来非常有前景,但我想知道是否有人使用它或知道任何其他合适的引擎?

open-source physics artificial-life

6
推荐指数
1
解决办法
960
查看次数

Farseer还是Box2D?自上而下的射手物理实现

其中哪一个更适合自上而下的射击游戏?

我听说Box2D表现得更快,但我也注意到它缺乏对XNA的更广泛的社区支持(它似乎用于闪存 - 出于我不知道的原因).

然而,Farseer是为XNA而构建的,似乎适合它并且表现非常好.在我看来,Farseer的优点还在于它干净,易于使用的API(它也非常适合我的游戏引擎结构).但是我很害怕如果我使用它会有一些缺点(子弹和高速机体?奇怪的不是数字崩溃?)

总的来说,如果您指出哪一个适合更好的XNA/PC开发,我将不胜感激.

我需要这个的原因:

  • 它不会仅用于一个自上而下的射击游戏,它意味着与游戏框架集成.
  • 即使是自上而下的射手也会在碰撞更好,物理逼真的环境中更具吸引力 - 例如你可以移动一个盒子进入掩体?
  • 以像素完美的方式手动控制碰撞将太昂贵(我没有时间对其进行优化 - 如果存在高级碰撞检测算法的高性能物理引擎,我也不需要它),而边界框碰撞是方式不切实际.

我现在应该得到你的意见吗?请保持直截了当告诉我,我使用Farseer而不是Box2D做了错误的步骤吗?(我必须在等待答案时开始工作.)

提前致谢

xna physics farseer box2d game-physics

6
推荐指数
1
解决办法
4238
查看次数

在2d空间的Javascript phsyics

所以,我正在自学Canvas(HTML5)并且编写了大部分简单的游戏引擎.它是空间场景(行星,恒星,天体等)的二维表示.我的默认"Sprite"类有一个像这样的帧监听器:

"baseClass"包含一个允许继承的函数,并将"a"应用于"this.a".所以,"var aTest = new Sprite({foo:'bar'});" 会使"aTest.foo ='bar'".这就是我将对象暴露给对方的方式.

Sprite = baseClass.extend({
  init: function(a){
    baseClass.init(this, a);
    this.fields = new Array(); // list of fields of gravity one is in. Not sure if this is a good idea.
    this.addFL(function(tick){ // this will change to be independent of framerate soon.

      // gobjs is an array of all the Sprite objects in the "world".
      for(i = 0; i < gobjs.length; i++){

        // Make sure its got setup correctly, make sure it -wants- gravity, and …
Run Code Online (Sandbox Code Playgroud)

javascript physics canvas

6
推荐指数
1
解决办法
871
查看次数

简单的2D火箭动力学

我目前正在使用Farseer Physics库在XNA中试验一些物理玩具,但我的问题不是特定于XNA或Farseer - 而是任何2D物理库.

我想添加"类似火箭"的运动(我说火箭就像它不必是火箭一样 - 它可能是水面上的飞机或船只或任何类似的情况)我的2D场景中的某些对象.我知道如何使用运动学模拟实现这一点,但我想使用动态模拟(即随时间推移施加力)来实现它.我对如何实现这一点感到很遗憾.

为了简化操作,我不需要动力学来旋转几何体,只是为了影响身体的速度.我正在使用一个设置为不在Farseer中旋转的圆几何,所以我只关心对象的速度.

我甚至不确定最好的抽象应该是什么.从概念上讲,我有身体当前移动的方向(单位矢量),我希望它去的方向,以及表示我希望它改变方向的速度的值,同时保持速度相对恒定(小的变化是可接受的).

我可以直接使用这种抽象,或使用类似"舵"值的东西来控制物体改变方向的速度(顺时针或逆时针).

我应该用什么样的力量来模拟我正在寻找的运动?请记住,我也希望能够在飞行中调整火箭的"推力".

编辑:我看到它的方式,并纠正我,如果我错了,你有两种力量(暂时忽略主推力):

1)你有一个静态的"鳍",总是指向与身体相同的方向.如果主体旋转使得翅片不与运动方向对齐,则空气阻力将沿着翅片的长度施加力,与运动方向和翅片之间的角度成比例.

2)你有一个"舵",它可以在指定的范围内自由旋转,这个范围与身体的质心相距一定距离(在这种情况下,我们有一个圆圈).同样,当该平面不平行于运动方向时,空气阻力沿着方向舵的长度引起比例力.

我的问题是,不同的说法,我如何计算空气阻力对鳍和方向舵的这些比例力?

编辑:作为参考,这里是我编写的一些代码来测试接受的答案:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {
        float dc = 0.001f;
        float lc = 0.025f;
        float angle = MathHelper.ToRadians(45);
        Vector2 vel = new Vector2(1, 0);
        Vector2 pos = new Vector2(0, 0);
        for (int i = 0; i < 200; i++)
        {
            Vector2 drag = vel * angle * dc;
            Vector2 sideForce = angle * …
Run Code Online (Sandbox Code Playgroud)

c# xna physics 2d farseer

6
推荐指数
1
解决办法
2571
查看次数

将RGB转换为光频率

是否有可能从RGB表示中获得颜色的光频率?我找到了相反的过程[1],但我不知道这是否可能.

[1] http://www.fourmilab.ch/documents/specrend/

algorithm rgb physics colors frequency

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

jBullet的例子

我正在尝试学习如何在我正在进行的项目中使用jBullet,并且我已经查看了源代码提供的演示,但我无法弄清楚这些演示如何显示对象.有没有人有一个很好的资源,他们可以指出我或提供一个基本的例子,在屏幕上显示一个或两个对象?

提前谢谢你,我很抱歉我没有任何代码可以显示我可以快速写一些如果需要但只是真正寻找方向去.

谢谢,

我正在使用的多维数据集的代码,所以我试图添加碰撞,但我不确定如何使用jbullet:

    public void  Draw() {
    // center point posX, posY, posZ
    float radius = size / 2;

    //top
    glPushMatrix();
    glBegin(GL_QUADS);
        {
            glColor3f(1.0f,0.0f,0.0f); // red
            glVertex3f(posX + radius, posY + radius, posZ - radius);
            glVertex3f(posX - radius, posY + radius, posZ - radius);
            glVertex3f(posX - radius, posY + radius, posZ + radius);
            glVertex3f(posX + radius, posY + radius, posZ + radius);
        }
    glEnd();
    glPopMatrix();

    //bottom
    glPushMatrix();
    glBegin(GL_QUADS);
        {
            glColor3f(1.0f,1.0f,0.0f); // ?? color
            glVertex3f(posX + radius, posY - radius, …
Run Code Online (Sandbox Code Playgroud)

java physics collision game-engine jbullet

6
推荐指数
1
解决办法
5072
查看次数

Python中的模型IV

模型四.

方法:执行积分,作为E的函数,为每个使用的电压值输出电流.对于v_values数组重复此操作.该等式可以在下面找到.

在此输入图像描述

尽管该等式中的极限范围-inf为0 inf,但是必须限制极限以使(E + eV)^ 2- \Δ^ 2> 0和E ^ 2- \Δ^ 2> 0,以避免极点.(\ Delta_1 =\Delta_2).因此,目前有两个积分,从限制-inf-gap-e*vgapinf.

但是,我一直回来,math range error虽然我相信我已经通过使用上述限制排除了麻烦的E值.错误的偏见:http://pastie.org/private/o3ugxtxai8zbktyxtxuvg

对这个问题的模糊性表示歉意.但是,任何人都可以看到明显的错误或代码滥用吗?

我的尝试:

from scipy import integrate
from numpy import *
import scipy as sp
import pylab as pl
import numpy as np
import math

e = 1.60217646*10**(-19)
r = 3000
gap = 400*10**(-6)*e
g = (gap)**2
t = 0.02
k = 1.3806503*10**(-23)
kt = …
Run Code Online (Sandbox Code Playgroud)

python integration physics numpy scipy

6
推荐指数
1
解决办法
948
查看次数

找到数值积分的根

我试图用Python重现这个Mathematica程序:

Mathematica计划

它找到了数值积分的根,并形成了这些值的图.但是,我不能让我试图跑.

目前的尝试:

来自scipy.integrate import quad from scipy import integration from scipy.optimize import fsolve import pylab as pl import numpy as np

# Variables.
boltzmann_const = 1.38e-23
planck_const = 6.62e-34
hbar = planck_const / ( 2 * np.pi )
transition_temp = 9.2
gap_energy_at_zero_kelvin = 3.528 / ( 2 * transition_temp * boltzmann_const )
debye_freq = ( 296 * boltzmann_const ) / hbar

# For subtracting from root_of_integral
a_const = np.log( ( 1.13 * hbar * debye_freq ) / ( boltzmann_const …
Run Code Online (Sandbox Code Playgroud)

python physics numpy scipy numerical-integration

6
推荐指数
1
解决办法
1439
查看次数

Unity C#在围绕移动轴旋转的目标上射击抛射物

我正在开发一个3D太空游戏,其中相机处于恒定的2D(自上而下)状态.我能够在以给定速度移动的目标上发射速度的射弹,并且每次击中它.大!那么如果那个目标在父母身边有一个角速度呢?我注意到如果目标有一个旋转的父对象,我的投影不正确,因为它没有考虑角速度.

我的初始代码是围绕以下假设构建的:

Position_target + Velocity_target * t = Position_shooter + Velocity_shooter * t + Bulletspeed * t
Run Code Online (Sandbox Code Playgroud)

我认为射手是静止的(或可能是移动的)并需要发射一个恒定大小的子弹.

我将上述内容简化为此

Delta_Position = Position_target - Position_shooter
Delta_Velocity = Velocity_target - Velocity_shooter

Delta_Position + Delta_Velocity * t = BulletSpeed * t
Run Code Online (Sandbox Code Playgroud)

平方双方我得到一个二次方程式,我可以求解给定的行列式结果或零.这很完美.我返回值,然后将目标的位置和当前速度投射到那个t,然后我有炮塔脚本,以给定的角速度朝着该点旋转.如果炮塔说它在所有轴上观察到的点在1%以内,它会以速度射击子弹,如果目标没有改变其航向或速度,它会100%命中.

我开始在我的船只/小行星上添加组件,这些组件是父对象的子项,就像连接到炮塔本身为目标的船只的炮塔.如果船围绕轴旋转(例如Y轴)并且炮塔不在x = 0且z = 0,则我的投影不再起作用.我认为使用r*sin(theta + omega*t)作为X位置的角速度分量和使用Z位置的r*cos(theta + omega*t)可以起作用.Theta是当前旋转(相对于世界坐标),omega是围绕y轴的eulerAngle旋转.

我很快就意识到这只适用于围绕y轴旋转,我不能将sin置于二次方程式中,因为我无法从中提取t因此我无法真正适当地投影.我尝试使用双曲线,但情况相同.我可以创建一个任意的t,假设t = 2,并计算对象在2秒内的位置.但我正在努力寻找一种方法来实现子弹速度投射.

Position_targetparent + Velocity_targetparent * t + [ANGULAR VELOCITY COMPONENT] = Position_shooter + Velocity_shooter * t + Bulletspeed * t

Delta_Position_X + Delta_Velocity_X * t + S * t = …
Run Code Online (Sandbox Code Playgroud)

c# physics projection kinematics unity-game-engine

6
推荐指数
1
解决办法
271
查看次数

在python中有效地计算n体引力

我试图计算由于重力引起的3空间n体问题的加速度(我使用辛欧拉).

我有每个时间步的位置和速度矢量,并使用下面(工作)代码来计算加速度并更新速度和位置.请注意,加速度是3空间中的矢量,而不仅仅是幅度.

我想知道是否有更有效的方法来计算这个与numpy以避免循环.

def accelerations(positions, masses):
    '''Params:
    - positions: numpy array of size (n,3)
    - masses: numpy array of size (n,)
    Returns:
    - accelerations: numpy of size (n,3), the acceleration vectors in 3-space
    '''
    n_bodies = len(masses)
    accelerations = numpy.zeros([n_bodies,3]) # n_bodies * (x,y,z)

    # vectors from mass(i) to mass(j)
    D = numpy.zeros([n_bodies,n_bodies,3]) # n_bodies * n_bodies * (x,y,z)
    for i, j in itertools.product(range(n_bodies), range(n_bodies)):
        D[i][j] = positions[j]-positions[i]

    # Acceleration due to gravitational force between each pair of bodies
    A …
Run Code Online (Sandbox Code Playgroud)

python simulation physics numpy

6
推荐指数
2
解决办法
1057
查看次数