标签: physics

F#适合物理应用吗?

我讨厌物理学,但我喜欢软件开发.当我在感恩节后回到学校时,在我完成可怕的事情之前,我将再接受两个季度的物理学习.我目前正在阅读关于F#测量单位功能的帖子,但我从未使用像F#这样的语言.是否适合编写应用程序,以便我可以在做自己喜欢的事情的同时学习物理知识?

对于运动学,平面运动,牛顿定律,引力,工作,能量,动量和冲动等系统,我对命令行应用程序(甚至那些我可以执行并且不需要输入就能吐出答案的程序)感兴趣粒子,旋转运动学和动力学,角动量,静态平衡,振荡运动,波动,声,物理光学,静电学,高斯定律,电场和电势,电容,电阻,直流电路,磁场,安培定律和电感.

我对F#感兴趣的原因是因为语言提供的度量单位功能.

.net f# physics

4
推荐指数
2
解决办法
1363
查看次数

2d球碰撞问题:没有能量守恒

我正在尝试编写一个简单的物理模拟,其中具有不同半径和质量的球在完全弹性和无摩擦的环境中反弹.我按照以下资源编写了自己的代码:http://www.vobarian.com/collisions/2dcollisions2.pdf,我也从这里测试了代码:Ball to Ball Collision - 检测和处理

编辑问题

在Rick Goldstein和Ralph的帮助下,我得到了我的代码(有一个错字......).非常感谢你的帮助.但是我仍然感到困惑,为什么其他算法不适合我.球以正确的方向反弹,但系统的总能量永远不会被保存.速度变得越来越快,直到球刚刚开始在屏幕上的静态位置闪烁.我实际上想在我的程序中使用这个代码,因为它比我编写的代码简洁得多.

这是我写的功能算法(尽管我从其他来源获取了第一位).它在泡泡类中:

public void resolveCollision(Bubble b)
{
    // get the minimum translation distance
    Vector2 delta = (position.subtract(b.position));
    float d = delta.getMagnitude();
    // minimum translation distance to push balls apart after intersecting
    Vector2 mtd = delta.multiply(((getRadius() + b.getRadius())-d)/d); 

    // resolve intersection --
    // inverse mass quantities
    float im1 = 1 / getMass(); 
    float im2 = 1 / b.getMass();

    // push-pull them apart based off their mass
    position = …
Run Code Online (Sandbox Code Playgroud)

java android physics collision game-physics

4
推荐指数
1
解决办法
1660
查看次数

移动球从惰性球反弹的角度

让两个球,其中一个在笛卡尔坐标平面上移动,而另一个是静止和不动的.在某些时候,移动的球与惰性球碰撞.假设移动的球在一条直线上移动,在得到以下信息的情况下,如何得出移动球将被推进的新角度:

移动球的中心坐标(X0,Y0),半径(R0)和撞击前的行程角度(A0)

固定球的中心坐标(X1,Y1)和半径(R1)

java math physics collision

4
推荐指数
1
解决办法
1964
查看次数

分离轴定理和Python

这就是我目前正在做的事情:

创建垂直于2个矩形的4个边的4轴.由于它们是矩形,因此我不需要为每条边生成轴(法线).

然后我循环我的4轴.

因此,对于每个轴:我将矩形的每个角投影到轴上.有两个包含这些投影的列表(数组).每个矩形一个.然后我得到每个投影和轴的点积.这将返回一个标量值,可用于确定最小值和最大值.

现在,2个列表包含标量而不是向量.我对列表进行排序,以便我可以轻松选择最小值和最大值.如果框B的最小值=框A的最大值或框B的最大值<=框A的最小值,则该轴上没有碰撞且对象之间没有碰撞.

此时函数完成并且循环中断.

如果所有轴都没有满足这些条件,那么我们就会发生碰撞

我希望这是正确的做法.

python代码本身可以在这里找到http://pastebin.com/vNFP3mAb

另外:http: //www.gamedev.net/page/reference/index.html/_/reference/programming/game-programming/collision-detection/2d-rotated-rectangle-collision-r2604

我遇到的问题是上面的代码不起作用.即使没有碰撞,它也始终检测到碰撞.我输入的内容正是代码所做的.如果我遗漏任何步骤或者只是不了解SAT如何运作,请告诉我.

python math pygame physics

4
推荐指数
1
解决办法
2085
查看次数

球物理问题Python

我试图在一个盒子里正确地弹出一个球,特别是在特定角度处理角落并处理一个角落.我有一个问题,因为我的球不断出现.我有这个功能,告诉我的球是否开箱即可,它可以处理角落和墙壁.代码是这样的:

    if ((self._x > self._Grid.getWidth()) or (self._x < 0)):
        print("RandomNode:outside paramaters: x! self._x = %s , self._velx = %s" % (self._x , self._velx))
    if ((self._y > self._Grid.getLength())  or (self._y < 0)):
        print("RandomNode:outside paramaters: y!")
    if ((self._velx + self._x) > self._Grid.getWidth()):
        diff = self._Grid.getWidth()-self._x
        self._velx *= -1
        if (diff == 0):
            self._x -= self._velx
        else:
            self._x+= diff
        tampered = True
        #print("eqn1: self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))

    if (self._velx + …
Run Code Online (Sandbox Code Playgroud)

python physics game-physics

4
推荐指数
1
解决办法
436
查看次数

Java物理引擎?

我一直在玩Java中的游戏开发,特别是Slick 2d游戏引擎.我对一个简单的游戏有一个想法,但我需要一个物理引擎.

我一直在互联网上寻找一个记录良好,免费的物理引擎.我从来没有使用过物理引擎所以我正在寻找一些相对简单的东西,有很多例子和文档.

java physics

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

计算大量粒子之间经历的类似重力的最快方法?

给定一组二维空间中的n个粒子,其中每个粒子对集合中所有其他粒子的吸引力,与它们之间的距离的平方成反比,你能想象任何巧妙的计算净力的方法吗?每个粒子,不进行n ^ 2距离计算?

从我的程序的Particle类:

    public void calculateAttractions(List<Particle> entities)
    {
        foreach (Particle p in entities)
        {
            if (!p.Equals(this))
            {
                Vector2 dx = this.Position - p.Position;
                this.ApplyForce(-dx / dx.LengthSquared());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在遇到性能问题之前,暴力方法只能在我的程序中模拟~150个粒子(使用XNA框架和Farseer物理引擎).

如果没有其他方法,这个代码怎么可能被优化,或者我怎么可能作弊?我已经尝试在粒子到粒子的基础上随机调用calculateAttractions(),这样在任何给定的时间内只有大约1/3的粒子被实际更新.这导致性能有所改善,但当然是以准确性为代价.

我要做的是类似于引力计算.有人在这个线程建议用复数工作,并用公式:

(z-z')/abs(z-z')**3
Run Code Online (Sandbox Code Playgroud)

但是,我不知道z指的是什么,我无法在其他任何地方找到这个等式的参考.

编辑:虽然我已经接受了下面的答案,但我最终使用了一个没人提到的解决方案:查找表.基本上,我预先计算所有距离(分辨率为1像素)的另一个粒子在一个粒子上施加的力,在任何方向上最多可达200​​0像素.然后可以在没有任何运行时距离计算的情况下确定力.虽然它不是一个精确的解决方案,但是失真是不可感知的,并且它允许我将模拟粒子的数量增加三倍(到现在数量被物理引擎而不是n体问题限制的程度. )

c# algorithm xna physics

4
推荐指数
1
解决办法
1760
查看次数

matplotlib热图反转数据?

这是一个奇怪的,希望有人可以帮助我.我正在尝试使用matplotlib热图来绘制我的数据的密度图,但不知何故,我的数据以一种奇怪的方式被反转/旋转.我有一个散点图,然后我将这些点分类为密度,但图像根本不应该出现.例如,这是原始散点图,它具有正确的方向:

原始散点图

然后,这里是我的热图(注意,该结构是从上面逆时针旋转90度,但该轴的数据是正确的......在轴上的数字,从数据自动生成的,所以如果你只是扭转轴图片出来正确但数字全部关闭):

热图具有错误的方向,但正确的轴

我只是看不出这是怎么回事,因为数据解析程序与我刚生成散点图之前的情况相同.它应该是热图贴图编码的方式,我想,但我不知道细分可能在哪里.我已经尝试过考虑热图的内置原点放置(左上角),但这并没有解决它.代码如下(首先解析所有数据):

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy
from pylab import *

twomass = atpy.Table()

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox2.tbl')


hmag = list([twomass['h_m']])
jmag = list([twomass['j_m']])
hmag = np.array(hmag)
jmag = np.array(jmag)
colorjh = np.array(jmag - hmag)

idx_c = (colorjh > -1) & (colorjh < 6)  #manipulate desired color quantities here
idx_h = (hmag > 8) & (hmag < 18)
idx = idx_c & idx_h
Run Code Online (Sandbox Code Playgroud)

现在这里是热图代码:

heatmap, xedges, yedges = np.histogram2d(colorjh[idx], hmag[idx], bins=500) …
Run Code Online (Sandbox Code Playgroud)

physics numpy matplotlib astronomy heatmap

4
推荐指数
1
解决办法
1235
查看次数

如何根据色标对voronoi进行着色?和每个细胞的面积

是否可以为scipy.spatial.Voronoi图表着色?我知道它是.

但现在我的目标是根据颜色标度为每个细胞着色以表示物理量.

如下图所示(PRL 107,155704(2011)):

在此输入图像描述

而且我还想知道是否可以计算每个单元格的面积,因为它是我想要计算的数量

python physics voronoi numpy

4
推荐指数
1
解决办法
1894
查看次数

物理模拟为简单轨迹演算提供(非常)不准确的位置

我想在游戏中实现物理引擎,以便计算施加力的物体的轨迹.该引擎将根据其先前的状态计算对象的每个状态.当然,这意味着两个时间单位之间的大量计算足够精确.

为了做到这一点,我首先要知道这种获取位置的方法与运动方程之间的差异有多大.所以我制作了这个代码,用于存储模拟给出的位置(x,y,z)和文件中的等式.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "header.h"


Body nouveauCorps(Body body, Vector3 force, double deltaT){
    double m = body.mass;
    double t = deltaT;

    //Newton's second law:
    double ax = force.x/m;
    double ay = force.y/m;
    double az = force.z/m;

    body.speedx += ax*t;
    body.speedy += ay*t;
    body.speedz += az*t;

    body.x +=t*body.speedx;
    body.y +=t*body.speedy;
    body.z +=t*body.speedz;

    return body;
}

int main()
{
    //Initial conditions:
    double posX = 1.4568899;
    double posY = 5.6584225;
    double posZ = -8.8944444;
    double speedX = 0.232323;
    double …
Run Code Online (Sandbox Code Playgroud)

c++ simulation physics

4
推荐指数
1
解决办法
192
查看次数