C++ 反向 vector TL 引擎

标签 c++ vector-graphics

当发生碰撞时,我在游戏中反转 vector 时遇到了一些问题,我需要做的是每次弹珠撞击物体时将值翻转为当前值的倒数。 vector 是我需要反转的方向,以使反弹看起来逼真。

最佳答案

所以你说的是数学意义上的 vector ,而不是容器。我们仍然假设您已经使用 std::vector<fieldT> 实现了它例如在哪里typedef double fieldT .你似乎想让一些障碍物反射(reflect)方向。当“镜子”位于您的一个基本 vector 的方向时,这很容易,那么您只需要取反该分量——xy-平面(3D 中)中的“镜子”就可以了

v[2] = -v[2];

即翻转 z 分量,在 yz 平面中它将是

v[0] = -v[0];

如果反射发生在任意方向,情况会变得更加复杂。一种可能性是确定平面方向上的速度分量——这是通过计算速度 vector 和平面法向 vector 之间的标量积来完成的——然后减去法向 vector 的两倍,并用该因子加权。

std::vector<fieldT> n   // normal vector of the plane
                  , v   // speed vector
                  ;

fieldT eta=0;
for (unsigned i=0; i<n.size(); ++i)     //scalar product between v and n
  eta += v[i]*n[i];
for (unsigned i=0; i<n.size(); ++i)     //substract twice the weighted normal vector
  v[i] -= 2*eta*n[i];

一种更通用的方法是通过矩阵应用对反射进行建模:反射本质上是正交线性映射的应用。

关于C++ 反向 vector TL 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931434/

相关文章:

python - PIL 和基于矢量的图形

javascript - 开放层 3 : How to change/set the style of vector map

android - 用于移动应用程序的 C++ 库

c++ - 使用 Visual C++ 的 NaN ASCII I/O

ios - 代码 : Vector images from PDF bad quality

c++ - 光线追踪 vector

android - 在 android 中扩展 google map api v2 的离线矢量 TileProvider

c++ - 在 Visual Studio 2017 中通过扩展每个参数包调用基类成员失败

c++ - Visual Studio 2010 在编译 C++/CLI 项目时出现奇怪的错误

c++ - 如何计算16bit到8bit的量化误差?