2015-11-20 17 views
0

我只是在处理一些东西,因为我知道它比任何其他语言都好,并且偶然发现在这个网站上Custom 2d physics engine。到现在为止还挺好。我在我有2个矩形碰撞的地步,我需要解决碰撞。根据论文我应该使用的代码:试图在java中使用C++创建一个物理引擎纪录片

void ResolveCollision(Object A, Object B) 
{ 
    // Calculate relative velocity 
    Vec2 rv = B.velocity - A.velocity 

    // Calculate relative velocity in terms of the normal direction 
    float velAlongNormal = DotProduct(rv, normal) 

    // Do not resolve if velocities are separating 
    if(velAlongNormal > 0) 
    return; 

    // Calculate restitution 
    float e = min(A.restitution, B.restitution) 

    // Calculate impulse scalar 
    float j = -(1 + e) * velAlongNormal 
    j /= 1/A.mass + 1/B.mass 

    // Apply impulse 
    Vec2 impulse = j * normal 
    A.velocity -= 1/A.mass * impulse 
    B.velocity += 1/B.mass * impulse 
} 

这是用C++编写的,所以我需要将它移植到java。在这里,我陷入了两件事。 1:作者用“正常”来表示什么?我如何获得“正常”?事情2是这3行代码:

Vec2 impulse = j * normal 
    A.velocity -= 1/A.mass * impulse 
    B.velocity += 1/B.mass * impulse 

他创建一个向量只有一个数字? j *正常吗? 我真的没有清楚地了解究竟发生了什么事情,这对我没有任何好处。

+0

如果你不知道什么是正常的矢量,这不是一个真正的编程问题:你应该对正在建模的数学做一些背景阅读。 http://mathworld.wolfram.com/NormalVector.html –

+0

正常在其他地方定义。搜索对象或任何'全局' – JFPicard

+0

“自定义3D物理引擎” - >您链接到一个名为“如何创建自定义2D物理引擎”的页面。 –

回答

0

他可能是指this为“正常”。所以正常的是一个有2个元素的矢量,因为你指的是2D物理教程。并j*normal将乘以normal的每个元素与标量j

normal,velocityimpulse是具有坐标x,y的2个元素的向量。从您所指的一系列教程中,您可以看到正常定义的here

+0

谢谢!清理了一些东西! – user1586195

0

在2D或3D形状的边界上的点的“正常”的向量是作为矢量:

  1. 垂直于该点处的边界;
  2. 长度为1;和
  3. 点向外而不是形状

法向矢量是相同的沿着一条直线(2D)或平面(3D),因此你也会听到人们谈论的“正常”内在这些情况下的线或表面。

法向矢量用于图形和物理代码中的各种重要计算。

如何精确计算点,线或面的法向量取决于代表对象几何的数据结构。

+0

好吧,这是我的正常吗? 'PVector normal = new PVector( - (B.pos.y-A.pos.y),(B.pos.x-A.pos.x));' – user1586195

+0

对不起,这不太对。 *如果你的物体是圆的*,那些是中心位置,那么接触点的法线是(B-A)/距离(A,B)。这可能是因为你的物理引擎正在简化这个假设。 –