标签: physics

为什么模拟中月球会向地球旋转?

我正在尝试模拟一个有点现实的程序,其中地球和月球可以通过引力相互作用。现在的问题是月球继续向地球旋转,我不明白为什么。

这是我的代码:

from math import sin,cos,sqrt,atan2,pi
import pygame
pygame.init()

class Planet:
    dt = 1/100
    G = 6.67428e-11 #G constant
    scale = 1/(1409466.667) #1 m = 1/1409466.667 pixels
    def __init__(self,x=0,y=0,radius=0,color=(0,0,0),mass=0,vx=0,vy=0):
        self.x = x #x-coordinate pygame-window
        self.y = y #y-coordinate pygame-window
        self.radius = radius
        self.color = color
        self.mass = mass
        self.vx = vx #velocity in the x axis
        self.vy = vy #velocity in the y axis
        
    def draw(self,screen):
        pygame.draw.circle(screen, self.color, (self.x, self.y), self.radius)
    
    def orbit(self,trace):
        pygame.draw.rect(trace, self.color, (self.x, self.y, 2, …
Run Code Online (Sandbox Code Playgroud)

python simulation pygame physics game-physics

5
推荐指数
1
解决办法
208
查看次数

我正试图让基本的碰撞动力学起作用

我把事情简化为立方体/单个立方体与无限质量矩形碰撞,并且代码如下:

问题是,盒子倾向于旋转太多并且卡在一起旋转,如果包含二进制搜索,只需点击并旋转很多.

感谢您的帮助.

/// <summary>
/// Projects an abstract 1D line "perpendicular" to the axis, 
/// stretching across the width of the model,
/// measured from that axis.
/// </summary>
/// <param name="Axis"></param>
/// <param name="Min"></param>
/// <param name="Max"></param>
protected virtual void ProjectToAxis(Vector2 Axis, IMotionData motionData, out double Min, out double Max)
{
    Double DotP = Axis.Dot(motionData.PositionGS + (this.Vertices[0].Position * this.Model.Scale).Rotate(motionData.RotationGS));

    Min = Max = DotP;

    for (int t = 1; t < this.Vertices.Count(); ++t)
    {
        DotP = Axis.Dot(motionData.PositionGS + …
Run Code Online (Sandbox Code Playgroud)

c# physics dynamic collision

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

如何用三角学而不是向量来处理球与球的碰撞?

我正在制作这个SO问题的球物理应用程序的简化版本.我通过阅读该问题提供的代码和链接获得了很多,但是在我的程序中我不使用向量,我只是更新我的球的坐标(每个都有一个随机的角度和速度)和三角函数撞到了墙上.

有关如何在没有三角测量的情况下处理球与球的碰撞的信息,但是我没有找到解释如何三角函数完成的信息.

--EDIT 9/13/2010--

成功......有点......我完成了我想做的事,但我无法按照自己的意愿去做.如果有一种方法可以在不使用矢量的情况下计算球与球之间的碰撞,那么我就无法实现.即便如此,矢量确实是处理所有类型碰撞的一种更简单的方法......我只是希望我知道当我开始我的程序时...会节省我两三天的工作:)所有的我(完整?)程序的代码如下.我添加了一些简洁的功能,如阴影和减小的球半径,这可以让你看到当一个大球击中一个小球时两个球的质量差异.总共有五个类文件,AddLogic.java,Ball.java,BallBuilder.java,MouseEventHandler.java,和Vector2D.java.

AddLogic.java

import java.awt.*;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;

public class AddLogic implements Runnable {//Make AddLogic a runnable task.

    private BallBuilder ballBuilder;
    private BufferStrategy strategy;
    private static ArrayList objectsToDraw = new ArrayList();
    private int floorHeight = 33;

    public AddLogic(BallBuilder ballBuilder, BufferStrategy strategy) {
        this.ballBuilder = ballBuilder;
        this.strategy = strategy;
    }

    private void logic(BallBuilder ballBuilder, BufferStrategy strategy) { …
Run Code Online (Sandbox Code Playgroud)

graphics physics trigonometry collision-detection

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

阻止box2d播放器在半空中按压墙壁

我已经设置了一个带键盘控制播放器的box2d世界.玩家可以走路和跳跃.如何在向对象跳跃并按方向键时阻止玩家"粘住"墙壁?

在此输入图像描述

flash physics actionscript-3 box2d

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

时间校正的Verlet集成和太大的时间步长

我使用此处的时间校正Verlet集成:http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-simple-time-corrected-verlet-integration-method-r2200

但当我的球在墙上(水平墙,球在上面并且加速度向下)一段时间后,我的游戏无法以正确的方式识别碰撞并且球落下.如果我把固定的上限设置为delta时间,如1/60,它似乎有效.

我认为问题是时间太长了.但是时间校正后的verlet集成是为了避免太大的时间步长,这是对的吗?如果是的话,为什么我需要时间上限?

time physics collision verlet-integration

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

在哪里我可以学习如何实现"我的水在哪里"的物理学?

我正在开发一种游戏,其中水作为一种属性,可用于解决谜题并与其他屏幕元素进行交互,我非常有兴趣了解他们如何设法获得如此流畅的物理交互.

使用粒子可以用Box2D完成吗?

iphone android physics box2d

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

如果使用CoreMotion/Accelerometer删除iPhone,则以编程方式检测

所以我正在编写一段代码,我必须在上面的iOS 4.3中使用Accelerometer和陀螺仪检测不同的移动手势.

Q1:是否有任何已实现任何移动/手势检测的开源代码?

如果不

Q2:现在我想检测一下iPhone是否掉线了.

到目前为止我所取得的成就: CoreMotion API提供了userAcceleration,其中(afaik)是用户给予设备的加速度或设备在某个方向(x,y或z)的加速度,而不考虑重力因此我是什么可以做的是:存储,比方说,前面的5-6个加速度参数值,可以检查其中任何一个点击大的负值,这基本上代表突然减速.

但是这个解决方案并不是非常优化,我认为我需要先以某种方式检测设备的自由落体/向下运动.知道如何解决这个问题吗?

更新: 感谢Misch分享您的方法.我一点也不考虑总加速度.我完全按照你的说法做了:

"但是你必须自己测试一下,"你的情况下"总加速度大致相当于地球加速度"和"一段时间".

加速度值实际上是G',因此我测试了"总加速度"值,范围为0.9 - 1.1.我检查了一段时间,最初我在updateInterval设置为1/20.0时检查了四个连续的值.现在我已经放松了一点连续的条件.

这是一个示例输出:

加速度= 0.090868
加速度= 0.074473
加速度= 0.159797
加速度= 1.157513
加速度= 1.224588
加速度= 1.036272
加速度= 0.914698
加速度= 0.904093
加速度= 0.941516
加速度= 0.046362
加速度= 0.045109
加速度= 0.060045

我想,我仍然要继续测试和调整价值观.如果你有任何优化,请分享,我知道为了帮助你需要看到许多自由落体加速度值的样本.现在我想:

  1. 将加速度值四舍五入到小数点后3位,然后使用我正在使用的加速度范围.
  2. 可以检查在满足自由落体条件后,总加速度值是否突然下降.
  3. 你认为我引用的加速度值有点吵?

physics accelerometer ios

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

iOS SpriteKit - 为bobblehead创建物理?

我正在尝试创建一个逼真的bobblehead应用程序,并希望使用物理学来挖掘动画.我已经看到其他应用程序在那里做,并从我收集我需要使用SpriteKit.

我创建了一个SKScene,并使用SKPhysicsJointPin将头部固定在身体上,但它根本不会移动.任何想法或建议?

更新后的代码(5/28):

现在在头上使用2个弹簧接头,它从左向右移动,但不是向上和向下移动.此外,快速敲击会使头部最终足够远,直至"跌落"并且不在视线范围内.奇怪的.

对于适当的设置有什么想法,让它能够在它的起始位置远离中心并保持在指定区域内,以便它能够从身体上滑落并看起来很有趣?

BobbleheadView是一个子类SKView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor =[UIColor clearColor];
        self.showsFPS = YES;
        self.showsNodeCount = YES;

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                       initWithTarget:self
                                       action:@selector(animateBobble)];

        [self addGestureRecognizer:tap];

        SKScene *bobbleheadScene = [SKScene sceneWithSize:self.bounds.size];
        [self presentScene:bobbleheadScene];

        // 1. Body
        self.body = [SKSpriteNode spriteNodeWithImageNamed:@"Bobble-Body"];
        self.body.position = CGPointMake(self.frame.size.width/2, self.body.frame.size.height/2);
        self.body.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
        [bobbleheadScene addChild:self.body];

        // 2. Head
        self.head = [SKSpriteNode spriteNodeWithImageNamed:@"Bobble-Head"];
        self.head.position = CGPointMake(self.center.x, self.body.frame.size.height);
        //self.head.physicsBody.affectedByGravity = YES;
//        self.head.physicsBody.dynamic = NO;
        //This …
Run Code Online (Sandbox Code Playgroud)

animation physics ios sprite-kit

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

为什么球在任意一段时间后都会粘在地上?

我有以下代码在屏幕上反弹多个球,利用物理学,木星的重力除以10用于测试目的.

var canvas = document.getElementById("canvas"),
    ctx = canvas.getContext('2d');

//jupiter's gravity divided by 10 for testing purposes
g = 24.79/10;
canvas.width = window.innerWidth - 50;
canvas.height = window.innerHeight - 22.5;
bounciness = (1/2)
var spawnrate = 16;
var inertia = 0.00075;
var gravity = g/25;
players = []
then = new Date()/1000;
moved = false;
function getPosition(event){
	mouseX = event.clientX;
	mouseY = event.clientY;
	if(moved == false){
		update();
		moved = true;
	}
}
function addCircle(){
    players.push({x: mouseX, y: mouseY, color: '#000000', radius: …
Run Code Online (Sandbox Code Playgroud)

html javascript css physics canvas

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

降噪计划

如果您要编写一个接收麦克风输入的程序,将其反转(通过将1的0和0的1设置为异相),然后从扬声器中播放它,是否可以取消声音?波浪物理学说,如果波峰与波谷对齐,就会发生破坏性干扰,因此如果没有"完全"消除,可以利用这些来实现降低的噪声.我可以想象,由于反转音频的复杂性,或者因为反转和回放需要太长时间,所以这不会起作用,因此声波已经过去了.如果我必须将一种语言联系在一起,那么它必须是c ++或java(我至少在两者中都胜任).

c++ java audio physics microphone

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