如何沿给定两点的线移动对象?

时间:2018-03-08 12:27:21

标签: c++ line angle sin cos

在我正在进行的游戏中,我有一座能射击敌人的塔。当敌人进入射程时,我试图让我的塔射向敌人。我的火球出现了,但是我有问题将火球移动到敌人身上。我的最新尝试只是让球在屏幕上跳舞。

球有x和y位置(类似球开始的位置)。 球也有一个新的X和新的位置,其中是敌人的位置。我正在考虑做毕达哥拉斯式的理论,但这只能让我知道我要去的那条线的长度。然后我在网上搜索并发现了关于罪,cos和atan的信息。我正在使用atan来获得我计算出的斜率的角度,然后将角度插入到sin和cos中。

My Ball :: Update功能如下所示:

int dx = newX - x;
int dy = newY - y;

int ang = atan(dy, dx);

x += cos(ang);
y += sin(ang);

那里的代码让球看起来像是在跳舞'屏幕上。它完全没有移动。我用这些代码测试了我的代码:

x + = cos(45); y + = sin(45);

球以45度角(向东南方向)移动,这是预期的。所以我猜测我的错误是在计算角度时。任何可以提供帮助的数学专家?

1 个答案:

答案 0 :(得分:1)

这是一个用于演示linear interpolation对(x,y)的小样本:

#include <iostream>

int main()
{
  double x0 = 2.0, y0 = 3.5;
  double x1 = 7.0, y1 = 2.0;
  // do linear interpolation in n steps
  enum { n = 10 };
  for (int i = 0; i <= n; ++i) {
    double t = (double)i / n;
    double xT = (1.0 - t) * x0 + t * x1;
    double yT = (1.0 - t) * y0 + t * y1;
    std::cout << i << ":\tt: " << t << ",\tx: " << xT << ",\ty: " << yT << '\n';
  }
  // your code goes here
  return 0;
}

输出:

0:  t: 0,   x: 2,   y: 3.5
1:  t: 0.1, x: 2.5, y: 3.35
2:  t: 0.2, x: 3,   y: 3.2
3:  t: 0.3, x: 3.5, y: 3.05
4:  t: 0.4, x: 4,   y: 2.9
5:  t: 0.5, x: 4.5, y: 2.75
6:  t: 0.6, x: 5,   y: 2.6
7:  t: 0.7, x: 5.5, y: 2.45
8:  t: 0.8, x: 6,   y: 2.3
9:  t: 0.9, x: 6.5, y: 2.15
10: t: 1,   x: 7,   y: 2

Life demo on ideone