作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我试图让玩家射出一颗子弹,子弹以波浪形射向鼠标。我可以让子弹以波浪模式移动(虽然不是我预测的那样),但不是朝向鼠标。
Vector2 BulletFun::sine(Vector2 vec) {
float w = (2 * PI) / 1000; // Where 1000 is the period
float waveNum = (2 * PI) / 5; // Where 5 is the wavelength
Vector2 k(0.0F, waveNum);
float t = k.dot(vec) - (w * _time);
float x = 5 * cos(t); // Where 5 is the amplitude
float y = 5 * sin(t);
Vector2 result(x, y);
return result;
}
现在速度不是什么大问题,一旦我弄明白了,这应该不是什么大问题。我确实得到了一些角度变化,但它似乎是颠倒的,只有 1/8 个圆。
我可能在某处计算错误。我刚刚了解了波矢。
我已经尝试了一些其他的东西,比如一维行波和另一个涉及通过 vec
调整正常正弦波的东西。结果大致相同。
谢谢!
编辑:
vec
是玩家位置到鼠标点击位置的位移。返回是一个新的 vector ,它被调整为遵循波浪模式,每次子弹接收和更新时调用 BulletFun::sine
。
设置是这样的:
void Bullet::update() {
_velocity = BulletFun::sine(_displacement);
_location.add(_velocity); // add is a property of Tuple
// which Vector2 and Point2 inherit
}
最佳答案
在伪代码中,您需要做的是:
waveVector = Vector2(travelDistance,amplitude*cos(2*PI*frequency*travelDistance/unitDistance);
cosTheta = directionVector.norm().dot(waveVector.norm());
theta = acos(cosTheta);
waveVector.rotate(theta);
waveVector.translate(originPosition);
那应该是在传统的坐标系中计算波矢,然后将其旋转到方向 vector 的局部坐标系(其中方向 vector 是局部x轴),然后相对于你的方向平移波矢波光束或其他任何东西的所需原点位置......
这将产生一个非常类似于
的函数Vector2
BulletFun::sine(Bullet _bullet, float _amplitude, float _frequency, float _unitDistance)
{
float displacement = _bullet.getDisplacement();
float omega = 2.0f * PI * _frequency * _displacement / _unitDistance;
// Compute the wave coordinate on the traditional, untransformed
// Cartesian coordinate frame.
Vector2 wave(_displacement, _amplitude * cos(omega));
// The dot product of two unit vectors is the cosine of the
// angle between them.
float cosTheta = _bullet.getDirection().normalize().dot(wave.normalize());
float theta = acos(cosTheta);
// Translate and rotate the wave coordinate onto
// the direction vector.
wave.translate(_bullet.origin());
wave.rotate(theta);
}
关于c++ - 二维波矢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184339/
我是一名优秀的程序员,十分优秀!