我正在尝试模拟一个有点现实的程序,其中地球和月球可以通过引力相互作用。现在的问题是月球继续向地球旋转,我不明白为什么。
这是我的代码:
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) 我把事情简化为立方体/单个立方体与无限质量矩形碰撞,并且代码如下:
问题是,盒子倾向于旋转太多并且卡在一起旋转,如果包含二进制搜索,只需点击并旋转很多.
感谢您的帮助.
/// <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) 我正在制作这个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) 我已经设置了一个带键盘控制播放器的box2d世界.玩家可以走路和跳跃.如何在向对象跳跃并按方向键时阻止玩家"粘住"墙壁?

我使用此处的时间校正Verlet集成:http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-simple-time-corrected-verlet-integration-method-r2200
但当我的球在墙上(水平墙,球在上面并且加速度向下)一段时间后,我的游戏无法以正确的方式识别碰撞并且球落下.如果我把固定的上限设置为delta时间,如1/60,它似乎有效.
我认为问题是时间太长了.但是时间校正后的verlet集成是为了避免太大的时间步长,这是对的吗?如果是的话,为什么我需要时间上限?
我正在开发一种游戏,其中水作为一种属性,可用于解决谜题并与其他屏幕元素进行交互,我非常有兴趣了解他们如何设法获得如此流畅的物理交互.
使用粒子可以用Box2D完成吗?
所以我正在编写一段代码,我必须在上面的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
我想,我仍然要继续测试和调整价值观.如果你有任何优化,请分享,我知道为了帮助你需要看到许多自由落体加速度值的样本.现在我想:
我正在尝试创建一个逼真的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) 我有以下代码在屏幕上反弹多个球,利用物理学,木星的重力除以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)如果您要编写一个接收麦克风输入的程序,将其反转(通过将1的0和0的1设置为异相),然后从扬声器中播放它,是否可以取消声音?波浪物理学说,如果波峰与波谷对齐,就会发生破坏性干扰,因此如果没有"完全"消除,可以利用这些来实现降低的噪声.我可以想象,由于反转音频的复杂性,或者因为反转和回放需要太长时间,所以这不会起作用,因此声波已经过去了.如果我必须将一种语言联系在一起,那么它必须是c ++或java(我至少在两者中都胜任).
physics ×10
box2d ×2
collision ×2
ios ×2
android ×1
animation ×1
audio ×1
c# ×1
c++ ×1
canvas ×1
css ×1
dynamic ×1
flash ×1
game-physics ×1
graphics ×1
html ×1
iphone ×1
java ×1
javascript ×1
microphone ×1
pygame ×1
python ×1
simulation ×1
sprite-kit ×1
time ×1
trigonometry ×1