当发生碰撞时,我在游戏中反转 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/