首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从使用c++的纪录片中创建一个java物理引擎

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

Stack Overflow用户
提问于 2015-11-20 23:34:43
回答 2查看 398关注 0票数 0

我只是在处理过程中胡乱摆弄了一下,因为我比其他任何语言都更了解它,并偶然发现了这个网站Custom 2d physics engine。到目前一切尚好。我在两个矩形相撞的地方,我需要解决这个碰撞。根据论文,我应该使用以下代码:

代码语言:javascript
复制
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:作者所说的“正常”是什么意思?我如何获得“正常”?第二件事是这3行代码:

代码语言:javascript
复制
  Vec2 impulse = j * normal
  A.velocity -= 1 / A.mass * impulse
  B.velocity += 1 / B.mass * impulse

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

EN

回答 2

Stack Overflow用户

发布于 2015-11-20 23:39:27

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

normalvelocityimpulse是坐标x,y的2个元素的向量。从您参考的系列教程中,您可以看到接近尾部的法线定义的here

票数 0
EN

Stack Overflow用户

发布于 2015-11-21 00:05:49

二维或三维形状边界点上的“法线”向量是这样的向量:

  1. 在该点处垂直于边界;
  2. 的长度为1;
  3. 指向外部而不是内部的shape

沿着直线(2d)或平面(3d)的法向量是相同的,因此在这些情况下,您还会听到人们谈论直线或曲面的“法线”。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33830445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档