2011-03-26 30 views
1

毫無疑問,這個問題之前已經被問到,除非我完全缺乏找到它的知識。將增量對轉換爲度數

我想寫經典的蛇(又名半字節)遊戲和邏輯非常簡單。方向由三角形座標對錶示。北是-1,0;東是0,1;南是1,0;西是0,-1。

自從我參加一個數學課程已經有十年了,所以我不確定如何將這些對轉換成北= 0度的對;東= 45,南= 90;而西= 135,在這種情況下,問題非常簡單,併成爲時鐘算術的情況,然後轉換回增量對。

而且,這不是學術作業,但self-education

編輯: 有一個工作原型,由於下面所選擇的答案。 http://ominian.com/examples/js/pinglib/snakes.html

+1

如果你知道你只有4個方向進入,爲什麼不只是有四個特殊情況下,你的方向是由一個枚舉或字符或類似的東西表示? – corsiKa 2011-03-27 00:09:35

+0

自北向0度,向東45度等。你是不是指0,90,180,270? – 2011-03-27 00:16:24

+0

@David Heffernan是啊......我只是測試,看看有沒有人注意到。當我回到裏面時,我意識到這個錯誤。 – David 2011-03-27 00:18:38

回答

2
  1. 如果你真的是度,那麼你想要的90度的增量,而不是45

  2. 您需要atan2函數(以各種形式存在於許多語言)。類似於angle = 180/pi * atan2(dy,dx) - 180/pi是因爲atan2返回弧度值。這會做什麼和你想要什麼之間有很多小的不匹配:dy將被採取向上而不是向下增加,0將是東向而不是向北,並且atan2通常返回在-pi和+ pi之間的值,而不是在0和二皮。解開所有這些僅僅是爲了讀者的練習:-)。

  3. 如果你只需要你描述的4個特殊情況,那麼你可以做一些醜陋的事情。例如,angle = 180*(dy-dx>0)+90*(dx!=0)將因S,W共享dy-dx>0和E,W共享dx!=0的財產而做的工作。

  4. 你可能會發現最好在各處使用dx,dy值,並且不要明確使用角度。例如,旋轉90度只是(dx,dy)=(-dy,dx)(或另一方向的(dy,-dx))。

+0

對於蛇遊戲,#4似乎是最便宜的解決方案,現在回想起我的筆記看起來很明顯。 – David 2011-03-27 00:22:02

0

你想要的函數是atan2() - arctangent的兩個參數。它在那裏專門用於這個目的。當然,它返回弧度結果,因此您必須轉換爲度數,並返回相對於常規角度的結果,其中0沿+ X軸,+ pi/2沿+ Y軸,所以你必須轉換到標題角度。

0

大多數語言都有一個atan2函數,它可以將x,y三角洲直接轉換爲以弧度表示的角度。您需要將其轉換爲度數。