我正在尝试创建一个在Box2D中围绕静态体旋转的动态体.我有一个零重力的世界,一个DistanceJoint连接两个身体的世界.我已经消除了身体和关节的所有摩擦力和阻尼,并对动态体施加了初始线速度.结果是身体开始绕行,但是它的速度随着时间的推移而减小 - 我没有想到在没有摩擦的零重力环境中.
难道我做错了什么?是否应该在每个步骤重新创建线性速度,还是可以将此工作委托给Box2D?
这是相关代码:
// positions of both bodies
Vector2 planetPosition = new Vector2(x1 / Physics.RATIO, y1 / Physics.RATIO);
Vector2 satellitePosition = new Vector2(x2 / Physics.RATIO, y2 / Physics.RATIO);
// creating static body
BodyDef planetBodyDef = new BodyDef();
planetBodyDef.type = BodyType.StaticBody;
planetBodyDef.position.set(planetPosition);
planetBodyDef.angularDamping = 0;
planetBodyDef.linearDamping = 0;
planetBody = _world.createBody(planetBodyDef);
CircleShape planetShapeDef = new CircleShape();
planetShapeDef.setRadius(40);
FixtureDef planetFixtureDef = new FixtureDef();
planetFixtureDef.shape = planetShapeDef;
planetFixtureDef.density = 0.7f;
planetFixtureDef.friction = 0;
planetBody.createFixture(planetFixtureDef);
// creating dynamic body
BodyDef …Run Code Online (Sandbox Code Playgroud) 我是iPhone开发人员的新手,想写一个涉及2d碰撞的游戏.有人会给我一个关于各种框架如何在典型的2D碰撞游戏中相互作用的概念性概述吗?
我到目前为止提到的候选人是2d软件包,如quartz和cocos2d,以及物理引擎,如chipmunk和box2d.在我的背景下,我不是非常清楚的是这些之间的关系.
在此先感谢您的回答!
我想在我正在制作的游戏中支持非常大的世界.这通常不是问题,因为我可以剔除世界上的大部分,因为它不是一次都可见的.但是,Box2D似乎不喜欢我的想法!
我的地形目前包含大约1000个边缘形状.然而,这一点似乎工作得很好:即使我只添加了几个(~25个)动态对象(小圆圈),性能也会急剧下降!
我正在使用OpenGL和C++开发游戏.我真的很喜欢硬件加速物理,但跨平台.有没有什么,可能在OpenCL中实现?
我在理解如何模拟这样的情况时遇到问题:http://phet.colorado.edu/sims/density-and-buoyancy/buoyancy_en.html
该程序的目的是制作一个模拟器 - 就像链接中的模拟器一样.我想保持现实并使用Python.我想在Pygame中绘制模拟.
在我的程序中,我要求几个变量; 质量和半径.半径将用于计算球体的体积,质量将用于计算浮力,重力和加速度.
但问题是,为了保持SI单位的所有内容,我要求以米为单位的半径.在保持半径小于10厘米的情况下这样做会产生非常小的数字.当我使用Pygame模块绘制0.1米大小的球体时,它会失败.因此,我需要使用更大的规模,而不是这样做.
所以这是我的主要问题.我应该如何扩展球体?假设我想将100像素定义为1米.然后我必须将我的半径乘以100,因为这将是比例,但是现在球体更大,速度是否也会乘以100?
我真的很困惑!谢谢你的时间.
无论如何,不知道你是否需要看到这个.
Calculations.py
import math
class Formulas():
def __init__(self):
self.pi = 3.1415926535
self.gravity = 9.82 #m/s^2
self.density_water = 1000.0 #kg/m^3
self.density_air = 1.29 #kg/m^3
self.drag_sphere = 0.47
def object_buoyancy(self, volume, medium_density):
buoyancy = volume * medium_density * self.gravity #N
return buoyancy
def object_gravity(self, mass):
gravity_force = mass * self.gravity #N
return gravity_force
def object_volume_sphere(self, radius):
volume = 1.3333333 * self.pi * math.pow(radius, 3) #m^3
return volume
def …Run Code Online (Sandbox Code Playgroud) 我有兴趣尝试为2D游戏创建逼真的流体(水).这场比赛类似于Terraria.我听说你怎么能在场景上拍下一堆碰撞粒子并在场景上渲染,瞧瞧真实的动作水.
Terraria使用基于水的水,我不喜欢它..我想要更先进的东西.
我想过使用子弹3D物理(box2d有限制我会打).对于非碰撞的粒子效果,我正在考虑使用像SPARK这样的东西,因为我认为它会给我两全其美的效果.
我正在考虑的问题是,每个块是16x16,所以在1600x900场景中,大约有5千块瓦片.
所以我需要告诉物理引擎这些瓷砖是可碰撞的.当然,有空瓦被认为是不可碰撞的.
有没有人有这方面的想法?语言是C++,但我怀疑它是否相关.
编辑:我想我将不得不陷入困境并使用基于网格的水.我想,回想一下,基于粒子只会使一切变得更加困难但是为了获得什么?
在过去的几周里,我一直在尝试模拟太阳系模拟中的轨道,我正在将其作为大学模块的一部分.简而言之,我的模拟使用Ogre3D渲染引擎用C++编写.我曾尝试使用牛顿万有引力定律实现轨道运动,这使得我的行星朝着太阳直线前进,穿过太阳然后回到它的起始位置.我还尝试了这篇维基百科文章中 "位置作为时间函数"部分的步骤,但这对我来说也不起作用.
我用简单的Euler积分方法驱动模拟.如果任何人对这种模拟有任何经验,或者只是对这些物理定律有很多了解,那么任何帮助或指向我正确的方向将非常感激.
所以,我正在尝试用JavaScript创建一个N-Body Gravity模拟:
var Circle = function(c, r, cor, cof) { // Fix CoR & CoF // Had to add code for JSFiddle link :P
this.c = c
this.r = r
this.m = r * r * Math.PI
this.v = new Vector()
this.cor = cor
this.cof = cof
}
Run Code Online (Sandbox Code Playgroud)
问题在于,当你产生(点击)并将2个球(意外地重命名为"粒子")彼此相邻时,它们开始产生速度并且更快更快地推动彼此.我如何解决这个问题,顺便说一句,我的重力实现是否正确?
首先,我试图在matplotlib中绘制球谐函数,因为它们在mayavi中可以看到:http://docs.enthought.com/mayavi/mayavi/auto/example_spherical_harmonics.html
这是我在的地方:
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from scipy import special
# Create a sphere
r = 3
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0:pi:50j, 0:2*pi:50j]
x = r * sin(phi) * cos(theta)
y = r * sin(phi) * sin(theta)
z = r * cos(phi)
colorfunction=special.sph_harm(3,4,theta,phi).real
norm=colors.Normalize(vmin = np.min(colorfunction), vmax = np.max(colorfunction), clip = False)
print colorfunction
fig = plt.figure() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用计算流体动力学领域的最佳实践技术来分析和可视化速度场.
鉴于6个阵列移动的颗粒的位置和速度的:x,y,z和vx,vy,vz分别.
我想要可视化和计算诱导速度场及其属性,例如:卷曲,发散,等值面等.
这是我可以在不调用的情况下使用的体积可视化函数的适度脚本meshgrid(避免插值和更多噪声).
最终,我不确定的事情之一是如何从空间中的50个点明智地创建网格,第二个是如何使用CFD方法来显示速度场,而不管数据点数量少.
close all
rng default
t=0.1:0.1:10;
x = sin(t)';
y = cos(t)';
z = t.^0.2';
vx=y;vy=x;vz=z;
figure
subplot(2,3,1);
quiver3(x,y,z,vx,vy,vz);
hold on
streamribbon({ [x y z] }, {vx},{vy},{vz});
subplot(2,3,2);
[curl_val, cav] = curl([x,y,z],[vx,vy,vz]);
surfc([x,y,z],cav);
subplot(2,3,3);
surfc([x,y,z],curl_val);
w = sqrt( vx.^2 + vy.^2 + vz.^2 );
subplot(2,3,4);
quiver3(x,y,z,vx,vy,vz);
streamtube({ [x y z] }, {w});
subplot(2,3,5);
quiver3(x,y,z,vx,vy,vz);
subplot(2,3,6);
surfc([x,y,z],[vx,vy,vz]);
Run Code Online (Sandbox Code Playgroud)
当我在真实数据 …
physics ×10
c++ ×4
box2d ×2
python ×2
vector ×2
2d ×1
android ×1
game-physics ×1
iphone ×1
javascript ×1
math ×1
matlab ×1
matplotlib ×1
performance ×1
plot ×1
pygame ×1
rokon ×1
simulator ×1