2015-02-11 104 views
0

說我在無限的2D網格系統上有兩個點。如何將一個點移動到C++的另一個點上?

第一點是在(3,5)的X,Y座標集處的用戶控制點。

第二點是X,Y座標集合(-20,30)處的計算機生成點。

我希望第二個點每秒向第一個點移動5個單位。我已經每秒鐘移動第二點,而不是第一點。

我需要知道如何在第二點向第一點移動,而不是在一個隨機的方向,因爲它是現在....

這是一個遊戲的方式,其中第2點是怪物追逐點1(玩家)。它正在用C++編碼。

+3

閱讀三角函數教程。 – 2015-02-11 00:33:27

+0

請仔細閱讀:http://en.m.wikipedia.org/wiki/Pythagorean_theorem – tofi9 2015-02-11 00:36:11

+0

閱讀Bresenham繪製線條的算法。該算法是增量式的,而不是*繪製*點,您移動該點。 – 2015-02-11 01:13:27

回答

3

讓我們一步一步瀏覽一下。

點1從(x,y)開始。點2在(x2,y2)。

它們之間的斜率是m =(y2-y)/(x2-x)。這告訴我們什麼?它告訴我們,如果我們想從點2移動到點1,那麼對於我們在x方向上移動的每一個單位,我們需要在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向上或向下。

+1

OP還應該檢查執行增量加法的Bresenham算法。 – 2015-02-11 01:12:35

相關問題