首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何沿给定两点的直线移动物体?

如何沿给定两点的直线移动物体?
EN

Stack Overflow用户
提问于 2018-03-08 12:27:21
回答 1查看 1.9K关注 0票数 0

在我工作的游戏中,我有一座能向敌人射击的塔。当敌人进入射程时,我正试图让我的塔向敌人射击。我的火球出现了,但是我很难把火球移到敌人身上。我最近的尝试只是让球在屏幕上跳来跳去。

球有x和y的位置(类似于球开始的位置)。球也有一个newX和newY位置,它是敌人所在的位置。我在考虑做毕达哥拉斯理论,但这只得到了我想要进入的直线的长度。然后我在网上搜索,发现了罪恶,因为,和阿坦。我用atan来得到我计算的斜率的角度,然后把角度插入到sin和cos中。

My::Update函数如下:

代码语言:javascript
复制
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度的角度(向东南方向)移动,这是意料之中的。所以我猜我的错误是在计算角度时。有数学专家能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-08 12:44:25

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

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49173095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档