试图从使用c++的纪录片中用java创建一个物理引擎

Trying to create a physics engine in java from documentary which uses c++

本文关键字:一个 创建 引擎 java c++ 纪录片      更新时间:2023-10-16

我只是在处理过程中遇到了一些麻烦,因为我比任何其他语言都更了解它,并且偶然发现了这个网站的自定义2d物理引擎。到目前为止还不错。我现在有两个矩形在碰撞,我需要解决这个碰撞。根据论文,我应该使用代码:

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

他创造了一个只有1个数的向量?j*正常?我真的不清楚到底发生了什么,这对我没有真正的好处。

他可能将此称为"正常"。所以法线是一个有2个元素的向量,因为你参考的是2D物理教程。并且j*normal将把normal的每个元素与标量j相乘。

normalvelocityimpulse是具有坐标x、y的2个元素的向量。从您所参考的一系列教程中,您可以看到在接近末尾时定义的法线。

2D或3D形状边界上一点的"法线"矢量是指:

  1. 垂直于该点的边界
  2. 长度为1;以及
  3. 指向外部而不是形状内部

法线向量在直线(2d)或平面(3d)上都是相同的,所以在这些情况下,你也会听到人们谈论直线或平面的"法线"。

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

如何准确计算点、线或曲面的法向量取决于表示对象几何体的数据结构。

相关文章: