說我在無限的2D網格系統上有兩個點。如何將一個點移動到C++的另一個點上?
第一點是在(3,5)的X,Y座標集處的用戶控制點。
第二點是X,Y座標集合(-20,30)處的計算機生成點。
我希望第二個點每秒向第一個點移動5個單位。我已經每秒鐘移動第二點,而不是第一點。
我需要知道如何在第二點向第一點移動,而不是在一個隨機的方向,因爲它是現在....
這是一個遊戲的方式,其中第2點是怪物追逐點1(玩家)。它正在用C++編碼。
說我在無限的2D網格系統上有兩個點。如何將一個點移動到C++的另一個點上?
第一點是在(3,5)的X,Y座標集處的用戶控制點。
第二點是X,Y座標集合(-20,30)處的計算機生成點。
我希望第二個點每秒向第一個點移動5個單位。我已經每秒鐘移動第二點,而不是第一點。
我需要知道如何在第二點向第一點移動,而不是在一個隨機的方向,因爲它是現在....
這是一個遊戲的方式,其中第2點是怪物追逐點1(玩家)。它正在用C++編碼。
讓我們一步一步瀏覽一下。
點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向上或向下。
OP還應該檢查執行增量加法的Bresenham算法。 – 2015-02-11 01:12:35
閱讀三角函數教程。 – 2015-02-11 00:33:27
請仔細閱讀:http://en.m.wikipedia.org/wiki/Pythagorean_theorem – tofi9 2015-02-11 00:36:11
閱讀Bresenham繪製線條的算法。該算法是增量式的,而不是*繪製*點,您移動該點。 – 2015-02-11 01:13:27