试图从使用c++的纪录片中用java创建一个物理引擎
Trying to create a physics engine in java from documentary which uses c++
我只是在处理过程中遇到了一些麻烦,因为我比任何其他语言都更了解它,并且偶然发现了这个网站的自定义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
相乘。
normal
、velocity
和impulse
是具有坐标x、y的2个元素的向量。从您所参考的一系列教程中,您可以看到在接近末尾时定义的法线。
2D或3D形状边界上一点的"法线"矢量是指:
- 垂直于该点的边界
- 长度为1;以及
- 指向外部而不是形状内部
法线向量在直线(2d)或平面(3d)上都是相同的,所以在这些情况下,你也会听到人们谈论直线或平面的"法线"。
法向量用于图形和物理代码中的各种重要计算。
如何准确计算点、线或曲面的法向量取决于表示对象几何体的数据结构。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何从这些语句中的每一个创建不同的函数?
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- 一个创建彩票游戏的程序,该彩票游戏可以有效地创建 10 套而没有任何重复?
- 如何实现一个创建新对象并返回对它的引用的C++方法
- 如何成功创建一个创建对象并返回指向该对象的指针的函数