看板 GameDesign 關於我們 聯絡資訊
大家好@@ 最近對寫程式不知道為什麼有莫名的熱情 所以在GameDesign版面上面Po了這麼多... 造成洗板 先在這裡跟大家道歉 只是有一段程式碼我看不懂 小弟我學的是C# 遊戲開發平台是XNA 不過小弟只是高一升高二的一位學生而已 數學的觀念不是很好 程式碼如下: ============================================================================== if (len > Wander_Radius) { float Yaw2 = (float)Math.Atan2(vector_to_center.X,vector_to_center.Z); float diff = Yaw2 - Yaw; float r = 0.01f * MathHelper.Pi*len; diff = MathHelper.Clamp(diff, -r, r); Yaw = Yaw + diff; } else { Yaw += MathHelper.Lerp(-0.05f, 0.05f, (float)rd.NextDouble()); } while (Yaw < -MathHelper.Pi) Yaw += MathHelper.TwoPi; while (Yaw > MathHelper.Pi) Yaw -= MathHelper.TwoPi; Vector3 step = new Vector3(0, 0, 0.01f); Position += Vector3.Transform(step, Matrix.CreateRotationY(Yaw)); ============================================================================== 希望大家看到變數名稱就知道他是做甚麼的@@ 我想問的問題有: 1.Atan2()是甚麼?為什麼可以求出反轉需要的角度呢?Atan是反三角函數嗎@@? 離X軸和離Z軸的值不是向量嗎?我大概知道三角函數是邊與邊的關係! 而反三角函數好像是利用某個數值換回原來的角度!但是有兩個向量是 怎麼一回事? 2.Clamp()是做啥的?是把數字壓縮變小在某個範圍嗎? 3.Lerp()取兩數之間的推估值 但是 .NextDouble() 是跑出0.1~1.0之間的數字嗎? 4.後面兩個while 看到旋轉超過正負Pi值會加上或減上兩個Pi 那不是會突然旋轉 180度嗎?還是我會錯意了? 感謝各位大大的回答:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.238.218 ※ 編輯: wa007123456 來自: 125.228.238.218 (08/18 02:20)
LPH66:簡短的回答: 1.2.請google 3.請看rd是什麼 4.2π是360度喔 08/18 02:32
wa007123456:先謝謝樓上 可是..while條件是大於或小於Pi的值 08/18 02:33
wa007123456:-Pi+2Pi=Pi(180度) 這樣對嗎@@? 08/18 02:34
LPH66:你覺得讓一個值一直加減到跑到[-180度,180度]之外好嗎? 08/18 02:34
LPH66:這會讓 sin/cos 等式子的精確度下降 08/18 02:35
LPH66:所以這裡的用意其實是正規化(normalize) 08/18 02:35
wa007123456:恩...謝謝你@@ 08/18 02:37
wa007123456:那兩個用wiki查可以嗎? 08/18 02:37
huadi73:1.是反三角 http://ppt.cc/7Zk9 向量可以平移 所以可以算 08/18 02:40
huadi73:角度 08/18 02:41
wa007123456:謝謝huadi73 :D 08/18 02:42
wa007123456:我看懂了...謝謝各位大大... 08/18 02:45
wa007123456:還有抱歉...他傳回來的是徑度對嗎@@ 08/18 02:49
SDNiceBoat:是徑度沒錯 08/18 08:43