我在Objective-C中实现了" Ball to Ball Collision - Detection and Handling " 问题的代码.然而,每当球以一定角度碰撞时,它们的速度会急剧增加.所有的矢量数学都是使用cocos2d-iphone完成的,标题为CGPointExtension.h.这种不希望的加速的原因是什么?
以下是速度提高的示例:
输入:
质量== 12.56637
velocity.x == 1.73199439
velocity.y == -10.5695238
ball.mass == 12.56637
ball.velocity.x == 6.04341078
ball.velocity.y == 14.2686739
输出:
质量== 12.56637
velocity.x == 110.004326
velocity.y == -10.5695238
ball.mass == 12.56637
ball.velocity.x == -102.22892
ball.velocity.y == -72.4030228
#import "CGPointExtension.h"
#define RESTITUTION_CONSTANT (0.75) //elasticity of the system
- (void) resolveCollision:(Ball*) ball
{
// get the mtd (minimum translation distance)
CGPoint delta = ccpSub(position, ball.position);
float d = ccpLength(delta); …Run Code Online (Sandbox Code Playgroud) 我正在制作一款你可以在这里看到的游戏,如果你在Windows或Linux上:http://insertnamehere.org/birdsofprey/
如果你单击并按住鼠标在鸟上,你可以看到我只是摆动摆动来回的鸟.相反,我想实现一个更逼真的动作,鼠标的移动会影响鸟的摆动,就像一个带有移动枢轴的钟摆一样.
我找到了一个关于这个主题的文件,但方程式依赖于知道枢轴的加速度(X''和Y''),我没有; 我只是反复将鸟图形转换为当前鼠标位置.
我有鸟的角度(-180到180度),角速度和加速度.每次移动鼠标时我都需要改变这三个变量,所以我也会有最后一个(x,y)和新鼠标(x,y).
这是否足以通过移动枢轴很好地模拟摆锤?
我想问一下果冻物理学 ( http://www.youtube.com/watch?v=I74rJFB_W1k ),在那里我可以找到一些开始制作类似东西的好地方?我想模拟汽车碰撞,我想使用这种果冻物理,但我找不到很多关于它们的信息。我不想使用现有的物理引擎,我想编写自己的 :)
我承认.我是一个数学上的低能儿.我应该在家里尝试吗?可能并非没有严重伤害.无论如何.任何具有一定游戏和物理经验的人都可以查看这些代码,并深入了解为什么原型中存在内置的"速度损失",这将是非常令人钦佩的.
这个概念:演员从天空坠落,在某个点与一个边界(trampoline.y)相交,之后重力(在这个例子中是1.6的值)停止运行并且恢复因子(在这种情况下是-6的值)需要过度.
现在我正在尝试创建一个零和的情况,你从蹦床"bounce"(hero.y> = trampoline.y)中获得的速度与你进入时相同.但事实并非如此痕迹揭示.
我已经尝试了五种不同的方法,这是最新的,鉴于我的游戏计时器(33毫秒)任何给定的"tic"我们可能已经通过蹦床的边界,因此加速规则将发生变化.我真的以为我拥有它,但结果显示每次反弹后速度都会降低,这不是我的预期.
我将以下代码提交给您的干净评论:
var newV:Number;
if (hero.y < trampoline.y) { newV = hero.velocityY + gravityAccelerationInPixels }
else { newV = hero.velocityY + TrampolineActor.SPRING_ACCELERATION }
var newY:Number = hero.y + newV;
trace("Coming in: y=" + hero.y + " oldVelocity=" + hero.velocityY + " newVelocity=" + newV + " Change in V: " + (newV - hero.velocityY) + ". Testing for newY=" + newY);
if ((hero.y < trampoline.y && newY < trampoline.y) || (hero.y >= trampoline.y && newY …Run Code Online (Sandbox Code Playgroud) 我一直在疯狂搜索文档,却找不到答案。
我正在用python生成FITS图像,需要为图像分配WCS坐标。我知道有很多方法可以通过将点源与已知目录进行匹配来完成此操作,但是在这种情况下,我正在生成尘埃图,因此,据我所知,点源匹配不起作用。
因此,图像是形状的二维Numpy数组(240,240)。它的写法是这样的(x和y坐标分配有点怪异,以某种方式起作用):
H, xedges, yedges = np.histogram2d(glat, glon, bins=[ybins, xbins], weights=Av)
count, x, y = np.histogram2d(glat, glon, bins=[ybins, xbins])
H/=count
hdu = pyfits.PrimaryHDU(H)
hdu.writeto(filename)
>>> print H.shape
(240,240)
Run Code Online (Sandbox Code Playgroud)
一切都可以正常工作。对于分配银河坐标,您似乎需要做的只是:
glon_coords = np.linspace(np.amin(glon), np.amax(glon), 240)
glat_coords = np.linspace(np.amin(glat), np.amax(glat), 240)
Run Code Online (Sandbox Code Playgroud)
但是我不了解FITS图像如何存储这些坐标,所以我不知道如何编写它们。我也尝试过在SAO DS9中分配它们,但是没有运气。我只需要将这些坐标分配给图像的简单方法。
感谢您的任何帮助,您可以提供。
我设置了一个英雄和一些从顶部向下移动的平台.有了这些,我有collisionBitMasks,可以检测英雄何时登陆平台,如果英雄来自上方(让英雄跳过平台)
if (_hero.physicsBody.velocity.dy > 0) {
_hero.physicsBody.collisionBitMask = 0;
}
else {_hero.physicsBody.collisionBitMask = platformCategory;
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了英雄在平台上弹跳.当平台向下移动时,有没有办法让他坐在上面?
我试着用physicsBody.resting和physicsBody.friction,但没有成功.
谢谢你的帮助
我正在为在屏幕上走动的小生物写一个模拟.我有一个问题是,他们将靠得太近有时 - 我想,解决这个一个方法是有一定的阈值距离,并能在任何两个生物得到比这个距离近,力将推开他们.
然而,在我实现这个之前,我想知道除了暴力之外是否还有任何已知的算法
解.
我一直在研究一些不同的算法,其中一个值得注意的是Barnes-Hut算法
时间 - 然而,我不确定这是否适合这个问题.
任何帮助表示赞赏
当以下是所有常数时,如何获得子弹击中目标所需的初始速度
time to target
gravity
initial position of the ball and the target
radius of the ball
Run Code Online (Sandbox Code Playgroud)
我在Unity 3D中使用c#为代码做了一些例子.我不是要求代码,我只是想知道采取什么步骤来做这件事(物理方面).
我想在 python 中创建一个简单的物理系统,它的工作quaternions方式与velocity/position. 它的主要目标是模拟一个被拖动的对象,并随着时间的推移尝试赶上另一个对象。模拟使用 3 个变量::k弹簧常数,d:阻尼因子,和m:拖动对象的质量。
使用经典的欧拉积分,我可以用以下方法解决位置:
import numpy as np
from numpy.core.umath_tests import inner1d
# init simulation values
dt = 1./30. # delta t @ 30fps
k = 0.5 # Spring constant
d = 0.1 # Damping
m = 0.1 # Mass
p_ = np.array([0,0,0]) # initial position of the dragged object
p = np.array([1,2,0]) # position to catch up to, in real life this value could change over …Run Code Online (Sandbox Code Playgroud) (为简单起见,在 2d 中工作)我知道由于重力作用在两个球体上的力
G(m1*m2/r**2)
是 我最初的想法是将圆圈装入物体中,这样重力产生的力将等于每个圆圈所受力的总和。例如(伪代码),
def gravity(pos1,shape):
circles = packCircles(shape.points)
force = 0
for each circle in circles:
distance = distanceTo(pos1,circle.pos)
force += newtonForce(distance,shape.mass,1) #1 mass of observer
return force
Run Code Online (Sandbox Code Playgroud)
这会是一个可行的解决方案吗?如果是这样,我将如何高效快速地打包圆圈?如果没有,是否有更好的解决方案?
编辑:注意我想如何在特定点找到物体的力,所以需要计算圆和观察者之间的角度(和矢量相加)。它不同于计算施加的总力。
physics ×10
python ×3
algorithm ×2
game-physics ×2
simulation ×2
astronomy ×1
c# ×1
collision ×1
fits ×1
graphics ×1
ios ×1
math ×1
numpy ×1
objective-c ×1
performance ×1
pyfits ×1
quaternions ×1
sprite-kit ×1