我不會想象有一個圖書館方法來找到兩個向量之間的角度,你正確地做了這個(數學是正確的)和周圍MSDN和谷歌沒有提供任何東西我快速瀏覽。我會使用SLaks的版本調用Math.Atan
方法。
自從您使用「水平」作爲您的平面來確定角度是否大於90度時,需要注意一件有趣的事情。如果endingLocation.x < Location.X,如果從正X軸進行測量,則角度將始終「大於」90度。
編輯: 原來的問題被改爲45度檢查。
下面的部分討論如何做到這一點,而不是根據OP所做的評論做浮點除法。
要了解您是否有45度角,我們知道一些事情,而實際上不需要在點上調用ATan
。
第一45度角的斜率爲1。因此,如果
Math.Abs((EndLocation.y - location.y)/(EndLocation.X - Location.X)) > 1
您有是> 45度的角度,但是作爲一個45度角的排列在一個圓發生4次。我們需要檢查一些事情。如果EndLocation.X < Location.X
那麼角度大於45度。這表示Y軸(90-270)的所有角度。要確定角度是否大於45度,我們只需要知道斜率的絕對值是否大於1.對於以下情況,這總是正確的。
Math.Abs(EndLocation.Y - Location.Y) > Math.Abs(EndLocation.X - Location.X)
。
所以用if語句下面類似
If (EndLocation.X < Location.X) OrElse (Math.Abs(EndLocation.Y - Location.Y) > Math.Abs(EndLocation.X - Location.X) Then AngleGreaterThan45 = True.
我們可以判斷的角度,而不進行任何浮點計算的需要大於45度。
你的意思是'點x和y定義的直線與角度大於90度的水平線相交?'如果你這樣做,答案是肯定的(繪製幾個例子來說服你自己),除非這條線是垂直或水平的。這應該引導你改進你的問題。 – 2010-05-17 15:53:40
我知道數學是正確的,我想知道是否有更好的內置函數是更傳播的(我討厭做浮點除法,如果我不需要的話)。 – 2010-05-17 15:55:37
@Scott Chamerlain回顧一下我的答案,如果您每次都使用X軸的水平方向,那麼這個方法可以不需要任何劃分。 – msarchet 2010-05-17 16:02:27