如何在C ++中将一点移向另一点?

时间:2015-02-11 00:30:59

标签: c++ algorithm math mmo

假设我在无限的2D网格系统上有两个点。

第一个点是X,Y坐标集(3,5)的用户控制点。

第二点是X,Y坐标集(-20,30)的计算机生成点。

我希望第二点每秒向第一个点移动5个单位。我已经有第二点每1秒移动一次,而不是第一点。

我需要知道如何将第二个点移向第一个点,而不是像现在这样随机方向....

顺便说一下这是游戏,其中第2点是追逐点1(玩家)的怪物。它是用C ++编写的。

1 个答案:

答案 0 :(得分:3)

让我们一步一步地完成它。

点1从(x,y)开始。第2点位于(x2,y2)。

它们之间的斜率是m =(y2-y)/(x2-x)。这告诉我们什么?它告诉我们,如果我们想要从第2点移动到第1点,我们在x方向上移动每1个单位,我们需要在y方向上移动m。

所以现在我们已经有了一个将它们相互移动的算法!只是速度不合适。

我们如何确定在x方向上我们应该移动多少点2,以便在y方向上移动正确的数量之后,它会在对角线上移动5个单位?

好吧,如果我们在y中以x和m为单位移动1个单位,我们将覆盖距离d = sqrt(1 ^ 2 + m ^ 2)(毕达哥拉斯定理)

我们希望在x方向上行进一些数字X,以便在沿y方向行驶Xm后,我们将移动5个单位。简单:我们移动的距离是d = sqrt(X ^ 2 +(Xm)^ 2)。只需将d设置为5:

5 = sqrt(X^2 + (Xm)^2)
25 = X^2 + (Xm)^2 = (m^2 + 1)*X^2
X^2 = 25/(m^2 + 1)
X = sqrt(25/(m^2 + 1))

现在,我们已经知道m是什么了。所以我们只需插入并解决X.但是注意X总是积极的。这是因为我们对方程求平方。因此,您必须找出X的正确符号。(只需检查点1是否位于第2点的左侧或右侧)

在我们完成之后,我们将知道第2点必须向左或向右移动X单位,并向上或向下移动mX。