如何在C++中将一个点移动到另一个点
How do I move one point towards another point in C++?
假设我在一个无限二维网格系统上有两个点。
第一个点是在(3,5)的X,Y坐标集中的用户控制点。
第二个点是计算机在X,Y坐标集(-20,30)上生成的点。
我希望第二个点每秒向第一个点移动5个单位。我已经让第二个点每1秒移动一次,只是没有朝着第一个点移动。
我需要知道如何将第二个点移向第一个点,而不是像现在这样朝着随机的方向移动。。。。
顺便说一句,这是一个游戏,点2是一个怪物追逐点1(玩家)。它是用C++编写的。
让我们一步一步地了解它。
点1从(x,y)开始。点2位于(x2,y2)。
它们之间的斜率为m=(y2-y)/(x2-x)。这告诉我们什么?它告诉我们,如果我们想从点2移动到点1,对于我们在x方向上移动的每1个单位,我们需要在y方向上移动m。
所以现在我们已经有了一个算法,可以将它们推向彼此!只是速度不对。
我们如何计算我们应该在x方向上移动点2多少,这样在y方向上移动正确的量后,它将总共对角移动5个单位?
如果我们在x中移动1个单位,在y中移动m个单位,我们将覆盖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。
相关文章:
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 将 std::array 移动到另一个 std::array
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何将所有指针从一个向量移动到另一个向量?
- 给定一个右值,为什么移动ctor比常量复制ctor更匹配
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 在数组的开头添加一个元素并移动其余元素,但保留大小
- 将列表的对象C++移动到另一个对象
- 创建一个移动分配函数,不断得到"pointer being freed was not allocated"
- 符合者在EAX上来回产生一个移动
- 我什么时候应该声明一个移动构造函数而不例外
- 从一个移动的摄像机到一个定点opengl
- 我丢失了一个移动/复制赋值
- 什么时候我应该提供一个移动感知过载
- 我能对一个移动的物体做什么呢?
- 用VBO和FBO绘制一个移动的精灵
- 如何跟踪一个移动的物体